- crate将相关功能组合到一个作用域内,便于在项目间进行共享——防止冲突
- 定义module来控制作用域和私有性:mod关键字,可嵌套:
mod front_of_house {
mod hosting {
fn add_to_waitlist() {}
fn seat_at_table() {}
}
mod serving {
fn take_order() {}
fn serve_order() {}
fn take_payment() {}
}
}
- 如果想把函数或struct等设置为私有,可以将它放入某个模块中
- Rust中所有的条目(函数,方法, struct, enum, 模块,常量)默认是私有的。
mod front_of_house {
mod hosting {
fn add_to_waitlist() {}
}
}
pub fn eat_at_restaurant() {
crate::front_of_house::hosting::add_to_waitlist();
front_of_house::hosting::add_to_waitlist();
}
mod front_of_house {
pub mod hosting {
pub fn add_to_waitlist() {}
}
}
pub fn eat_at_restaurant() {
crate::front_of_house::hosting::add_to_waitlist();
front_of_house::hosting::add_to_waitlist();
}
- 同一层的可以使用,不同层的子用父,父不可用子。
- super:用来访问父级模块路径中的内容,类似于文件系统中的..
mod back_of_house {
pub struct Breakfast {
pub toast: String,
pub seasonal_fruit: String,
}
impl Breakfast {
pub fn summer(toast: &str) -> Breakfast {
Breakfast {
toast: String::from(toast),
seasonal_fruit: String::from("peaches"),
}
}
}
}
pub fn eat_at_restaurant() {
let mut meal = back_of_house::Breakfast::summer("Rye");
meal.toast = String::from("Wheat");
println!("I'd like {} toast please", meal.toast);
meal.seasonal_fruit = String::from("blueberryes");
}
- pub放在enum前:—enum是公共的
- enum的变体也都是公共的
- 可以使用use关键字将路径导入到作用域内:仍遵守私有性原则