1. pub关键字置于函数定义之前
- 使用范围:用于将函数定义为公共函数,使得该函数在其所在模块的外部也能被调用。
- 可见性规则:如果函数所在模块是公共的(使用
pub mod
声明),那么该公共函数在模块树中,只要父模块可见,该函数就能被访问。
- 示例:
mod my_module {
// 定义公共函数
pub fn public_function() {
println!("This is a public function.");
}
}
fn main() {
my_module::public_function();
}
2. pub关键字置于结构体定义之前
- 使用范围:使结构体在模块外部可见。不过,结构体的字段默认仍然是私有的,即使结构体本身是公共的。
- 可见性规则:与公共函数类似,只要结构体所在模块是公共的,在模块树中,只要父模块可见,该结构体就能被引用。
- 示例:
mod my_module {
// 定义公共结构体
pub struct PublicStruct {
// 私有字段
private_field: i32,
}
impl PublicStruct {
// 公共结构体的公共方法
pub fn new() -> Self {
PublicStruct { private_field: 42 }
}
}
}
fn main() {
let instance = my_module::PublicStruct::new();
// 不能直接访问private_field,因为它是私有的
// println!("{}", instance.private_field);
}
3. pub关键字置于结构体字段定义之前
- 使用范围:不仅使结构体在模块外部可见,还使该字段在模块外部也能被访问。
- 可见性规则:当结构体和字段都标记为
pub
,并且结构体所在模块是公共的,在模块树中,只要父模块可见,该结构体及其公共字段就能被访问。
- 示例:
mod my_module {
// 定义公共结构体
pub struct PublicStruct {
// 公共字段
pub public_field: i32,
}
}
fn main() {
let instance = my_module::PublicStruct { public_field: 42 };
println!("{}", instance.public_field);
}