为了在Rust的模块中找到某个条目,需要使用路径
路径分为两种方式:
- 相对路径:从crate root开始,使用crate名或者字面值crate
- 绝对路径:从当前模块开始,使用self,super或当前模块的标识符
路径至少由一个标识符组成,标识符之间用::
mod car{
pub mod volkswagen_group {
pub fn get_audi(){
println!("this is audi")
}
}
}
pub fn get_car(){
//绝对路径
crate::car::volkswagen_group::get_audi();
//相对路径
car::volkswagen_group::get_audi();
}
私有边界
模块不仅可以组织代码,还可以定义私有边界
如果想把函数、struct等设为私有,可以将它放在模块中
Rust中所有条目(函数、方法、 enum、 struct、模块、常量)默认都是私有的
父级模块无法访问子模块中私有条目
子模块可以使用父级模块中的条目
pub关键字
使用pub关键字可以把条目标记为公共的
上述例子中我们使用了pub关键字把模块volkswagen_group和函数get_audi()标记成了公共的,所以get_car()函数才能调用他们。
super关键字
调用父级模块的函数时用super修饰
mod car{
pub mod volkswagen_group {
pub fn get_audi(){
//相对路径
get_porsche();
//相对路径
super::geely::get_xingrui();
//绝对路径
crate::car::geely::get_xingrui();
}
pub fn get_porsche(){}
}
pub mod geely{
pub fn get_xingrui(){}
}
}
pub struct
pub可以把struct修饰成公共的
但是struct里的字段默认还是私有的,也可以用pub修饰字段
pub struct Student{
pub name: String,
age:i32,
sex:i32
}
pub enum
pub可以把enum修饰成公共的
加了pub的enum里的变体会默认变成公共的
pub enum IpAddress {
Ipv4,
Ipv6
}