MST

星途 面试题库

面试题:Rust中pub关键字在嵌套模块中的传播与限制

假设有一个Rust项目,存在多层嵌套模块结构,例如module1包含module2,module2又包含module3。在这种结构下,如何合理使用pub关键字,使得module3中的某个函数在module1外部可见,但module2中的一些内部函数对module1外部不可见?请写出相应的模块定义和pub关键字使用的代码示例,并解释其原理。
17.9万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

代码示例

// 定义 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();
}

原理解释

  1. pub关键字在模块上的使用:在module1中的module2module2中的module3前面都加上pub关键字,这使得module2module1外部可见,module3module2外部(即module1内部及module1外部)可见。如果没有pub关键字,这些嵌套模块默认是私有的,外部无法访问。
  2. pub关键字在函数上的使用:在module3中的visible_function函数前面加上pub关键字,使得该函数对module3外部可见。而module3中的internal_function以及module2中的internal_function没有pub关键字,它们是私有的,只能在各自所在的模块内部使用。这样就满足了module3中的某个函数在module1外部可见,但module2中的一些内部函数对module1外部不可见的要求。