Создание псевдонимов use

#![allow(unused)]
fn main() {
use crate::front_of_house::hosting;

pub fn eat_at_restaurant() {
    hosting::add_to_waitlist();
}
}

use создаёт псевдоним только для той конкретной области, в которой это объявление use и находится

чтобы была видимость модуля можно переместить use в модуль видимости, или же можно сослаться на псевдоним в родительском модуле с помощью super::hosting из дочернего модулея customer.

Подключение одинаковых типов из разных модулей

#![allow(unused)]
fn main() {
use std::fmt;
use std::io;

fn function1() -> fmt::Result {
    // --snip--
    Ok(())
}

fn function2() -> io::Result<()> {
    // --snip--
    Ok(())
}
}

Ключевое слово as

Есть другое решение проблемы добавления двух типов с одинаковыми именами в одну и ту же область видимости используя use: после пути можно указать as и новое локальное имя (псевдоним) для типа

#![allow(unused)]
fn main() {
use std::fmt::Result;
use std::io::Result as IoResult;

fn function1() -> Result {
    // --snip--
    Ok(())
}

fn function2() -> IoResult<()> {
    // --snip--
    Ok(())
}
}

Реэкспорт имен pub use

#![allow(unused)]
fn main() {
mod front_of_house {
    pub mod hosting {
        pub fn add_to_waitlist() {}
    }
}

pub use crate::front_of_house::hosting;

pub fn eat_at_restaurant() {
    hosting::add_to_waitlist();
}
}

делаем экспортируемый функционал видимым в других блоках

Использование внешних пакетов

  1. Добавить в зависимости имя и версию пакета в Cargo.toml
  2. Прописать use имя пакета и функцию
  3. Применить функцию в коде

Вложенные пути

#![allow(unused)]
fn main() {
use rand::Rng;
// --snip--
use std::{cmp::Ordering, io};
// --snip--

}

или

#![allow(unused)]
fn main() {
use std::io::{self, Write};
}

Эта строка подключает std::io и std::io::Write в область видимости.

Оператор * (glob)


#![allow(unused)]
fn main() {
use std::collections::*;
}

включает все элементы коллекции

Модули в разные файлы

  1. Перенос модуля front_of_house
  • Файл: src/lib.rs
#![allow(unused)]
fn main() {
mod front_of_house;

pub use crate::front_of_house::hosting;

pub fn eat_at_restaurant() {
    hosting::add_to_waitlist();
}
}
  • Файл: src/front_of_house.rs
#![allow(unused)]
fn main() {
pub mod hosting {
    pub fn add_to_waitlist() {}
}
}
  1. Перенос модуля hosting
  • Файл: src/front_of_house.rs
#![allow(unused)]
fn main() {
pub mod hosting;
}
  • Файл: src/front_of_house/hosting.rs
#![allow(unused)]
fn main() {
pub fn add_to_waitlist() {}
}