面试题答案
一键面试在Rust中,pub
关键字用于控制模块内结构体、函数和模块自身的可见性,以下是不同情况下的使用方法:
1. 控制函数的可见性
- 默认不可见:在模块内定义的函数,默认是私有的,即只能在当前模块内部调用。
mod my_module {
fn private_function() {
println!("This is a private function.");
}
}
这里private_function
只能在my_module
模块内部使用。
- 使用
pub
使其可见:在函数定义前加上pub
关键字,函数就可以被外部模块访问。
mod my_module {
pub fn public_function() {
println!("This is a public function.");
}
}
fn main() {
my_module::public_function();
}
此时在main
函数中可以调用my_module::public_function
。
2. 控制结构体的可见性
- 结构体可见性:
- 默认不可见:结构体默认是私有的,不能在定义它的模块之外实例化。
mod my_module {
struct PrivateStruct {
field: i32,
}
}
PrivateStruct
只能在my_module
内部使用。
- 使用pub
使其可见:在结构体定义前加上pub
关键字,结构体就可以在外部模块被使用,但结构体的字段默认还是私有的。
mod my_module {
pub struct PublicStruct {
field: i32,
}
}
fn main() {
// 以下代码会报错,因为field是私有的
// let s = my_module::PublicStruct { field: 10 };
}
- 结构体字段可见性:如果想让结构体的字段也能在外部模块访问,需要对字段也使用
pub
关键字。
mod my_module {
pub struct PublicStruct {
pub field: i32,
}
}
fn main() {
let s = my_module::PublicStruct { field: 10 };
println!("The field value is: {}", s.field);
}
这样在main
函数中可以实例化PublicStruct
并访问其field
字段。
3. 控制模块自身的可见性
- 默认不可见:模块默认是私有的,不能被外部模块访问。
mod private_module {
pub fn inner_function() {
println!("This is an inner function in a private module.");
}
}
private_module
及其内部的inner_function
都不能在外部模块直接访问。
- 使用
pub
使其可见:在模块定义前加上pub
关键字,模块就可以被外部模块访问。
pub mod public_module {
pub fn inner_function() {
println!("This is an inner function in a public module.");
}
}
fn main() {
public_module::inner_function();
}
此时在main
函数中可以调用public_module::inner_function
。