MST

星途 面试题库

面试题:Rust中模块内部与外部如何进行访问控制

请描述在Rust中,模块内部函数与外部调用之间访问控制的规则,例如如何在不同模块间通过`pub`关键字来暴露和访问函数、结构体等。并举例说明在一个简单项目结构中有两个模块,一个模块如何访问另一个模块中定义的特定函数。
18.5万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试

在Rust中,模块内部函数默认是私有的,只有通过pub关键字声明才能被外部模块访问。

对于结构体,默认情况下,结构体及其字段都是私有的。如果要使结构体可被外部模块访问,需要使用pub关键字声明结构体本身。若想让结构体的字段也能被外部模块访问,还需分别对字段使用pub关键字。

以下是一个简单项目结构示例,有两个模块:

// src/lib.rs
mod module1;
mod module2;

pub use module1::func1;
pub use module2::func2;

// src/module1.rs
pub fn func1() {
    println!("This is func1 in module1");
}

// src/module2.rs
use crate::module1::func1;

pub fn func2() {
    println!("Before calling func1 from module2");
    func1();
    println!("After calling func1 from module2");
}

在上述代码中:

  1. module1.rs里,func1函数通过pub关键字声明,这样其他模块就可以访问它。
  2. module2.rs里,通过use crate::module1::func1引入module1中的func1函数,然后在func2函数中调用。
  3. lib.rs中,通过pub usemodule1::func1module2::func2重新导出,这样外部使用这个库的代码就可以直接访问func1func2