1.可以使用use关键字将路径导入到作用域中
- 引入的东西仍然遵循私有性规则
mod front_of_house {
pub mod hosting {
pub fn add_to_wait() {}
fn add_to_me() {}
}
}
use crate::front_of_house::hosting;
pub fn eat() {
hosting::add_to_wait();
// hosting::add_to_me(); 私有性,父访问子,访问不到
}
- 使用use来指定相对路径
上面代码中去掉crate::就行
2.use的习惯用法
- 引用函数,一般是引用到他的父模块,然后通过他的父模块来调用他,和本地定义的区分开
- 引入struct,enum等,指定完整路径,就是引用到他本身
- 如果在两个不同的模块中出现了名称相同的struct,那么就引入到他们的父模块
3.as关键字
- as关键字可以为引入的路径指定本地的别名
use std::fmt::Result;
use std::io::Result as IoResult;
4.使用pub use 重新导出名称
使用use将路径导入到作用域后,该名称在此作用域内是私有的
所以加上use,在外部文件中也就可以使用引入的这个文件
pub use crate::front_of_house::hosting;
重导出
- 可以将条目引入作用域
- 该条目可以被外部代码引入到他们的作用域
5.使用外部包(package)
- 在cargo.toml添加依赖的包, 他就会从crate.io 下下包
- 使用use将特定条目引入作用域
- 标准库(std)也被当做外部包,但是不需要修改cargo.toml来包含,只需使用use引入到作用域即可
6.使用嵌套路径清理大量的use语句
如果使用同一个包或模块下的多个条目,可以使用嵌套路径在同一行内将所有条目进行引入
- 路径相同的部分::{路径差异的部分}
- 如果两个use路径之一是另一个的子路径,可以使用use
use std::cmp::Ordering;
use std::io;
等价于
use std::{cmp::Ordering,io};
use std::io::Write;
use std::io;
等价于
use std::io::{self,Write};
7.通配符*
可以使用* 把路径中所有的公共条目都引入到作用域
use std::cmp::Ordering::*;
这个谨慎使用
应用场景
- 测试的时候,将所有被测试的代码引入到tests模块
- 用于预导入模块