代码示例
// 定义 module1
mod module1 {
// 定义 module2
pub mod module2 {
// 定义 module3
pub mod module3 {
// 使得在 module1 外部可见的函数
pub fn visible_function() {
println!("This is a visible function in module3.");
}
// module3 内部不可见的函数
fn internal_function() {
println!("This is an internal function in module3.");
}
}
// module2 内部不可见的函数
fn internal_function() {
println!("This is an internal function in module2.");
}
}
}
fn main() {
// 调用 module3 中的可见函数
module1::module2::module3::visible_function();
}
原理解释
pub
关键字在模块上的使用:在module1
中的module2
和module2
中的module3
前面都加上pub
关键字,这使得module2
对module1
外部可见,module3
对module2
外部(即module1
内部及module1
外部)可见。如果没有pub
关键字,这些嵌套模块默认是私有的,外部无法访问。
pub
关键字在函数上的使用:在module3
中的visible_function
函数前面加上pub
关键字,使得该函数对module3
外部可见。而module3
中的internal_function
以及module2
中的internal_function
没有pub
关键字,它们是私有的,只能在各自所在的模块内部使用。这样就满足了module3
中的某个函数在module1
外部可见,但module2
中的一些内部函数对module1
外部不可见的要求。