面试题答案
一键面试1. Rust模块系统中隐私边界的确定
在Rust中,隐私边界由模块来确定。默认情况下,模块中的所有项(函数、结构体、枚举等)都是私有的,只能在定义它们的模块内部访问。要使项在模块外部可见,需要使用pub
关键字进行标记。例如:
mod outer {
// 私有函数
fn private_function() {
println!("This is a private function");
}
// 公有函数
pub fn public_function() {
println!("This is a public function");
private_function();
}
}
在上述代码中,private_function
只能在outer
模块内部调用,而public_function
可以在outer
模块外部调用。
2. 模块导入时可见性的传播
当一个模块导入另一个模块时,只有被标记为pub
的项才会被导入到新的作用域中。例如:
mod utils {
pub fn helper_function() {
println!("This is a helper function");
}
}
mod main_module {
use crate::utils::helper_function;
pub fn main_function() {
helper_function();
}
}
在main_module
中,通过use crate::utils::helper_function
导入了utils
模块中的helper_function
,因为helper_function
被标记为pub
,所以可以在main_module
中使用。
3. 多层嵌套模块结构中修改pub
属性的影响
假设存在多层嵌套模块结构,修改内层模块中pub
属性会对整个模块层次结构中其他部分的访问权限产生如下影响:
mod outer {
mod middle {
pub mod inner {
pub fn inner_function() {
println!("This is an inner function");
}
}
}
pub fn outer_function() {
middle::inner::inner_function();
}
}
fn main() {
outer::outer_function();
// 以下代码如果取消注释会报错,因为默认情况下不能直接访问内层模块
// outer::middle::inner::inner_function();
}
在上述代码中,inner_function
是inner
模块中的公有函数,outer_function
可以通过正确的路径调用inner_function
。
如果将inner
模块的pub
去掉:
mod outer {
mod middle {
mod inner {
pub fn inner_function() {
println!("This is an inner function");
}
}
}
pub fn outer_function() {
// 这里会报错,因为middle::inner不再是公有模块
// middle::inner::inner_function();
}
}
此时,outer_function
无法访问inner_function
,因为middle::inner
模块不再是公有的,即使inner_function
是公有的也无法从outer
模块外部访问。同样,在main
函数中更无法直接访问inner_function
。
总结来说,内层模块的pub
属性决定了其内部公有项能否被外层模块访问,修改pub
属性会直接影响模块层次结构中其他部分对该内层模块及其内部公有项的访问权限。