MST

星途 面试题库

面试题:Rust模块访问控制基础

在Rust中,假设我们有一个模块结构如下:src目录下有main.rs和mod.rs,mod.rs中定义了一个模块子模块submod。现在在main.rs中要调用submod中的一个函数func,并且func需要访问mod.rs中定义的一个结构体StructA,写出相应的模块声明、结构体定义及函数调用的代码示例,并指出访问控制修饰符如何使用才能让这些代码正常工作。
11.4万 热度难度
编程语言Rust

知识考点

AI 面试

面试题答案

一键面试
  1. mod.rs代码
// 定义结构体StructA,使用pub修饰符使其能被外部模块访问
pub struct StructA {
    pub field: i32,
}

// 定义子模块submod
pub mod submod {
    // 引入外部模块的StructA
    use super::StructA;

    // 定义函数func,使用pub修饰符使其能被外部模块访问
    pub fn func(s: &StructA) {
        println!("访问StructA的field: {}", s.field);
    }
}
  1. main.rs代码
// 引入mod.rs中的内容,因为mod.rs和main.rs在同一目录,默认会引入
mod mod;

fn main() {
    let s = mod::StructA { field: 42 };
    mod::submod::func(&s);
}
  1. 访问控制修饰符说明
    • mod.rs中,StructA结构体需要使用pub修饰符,这样才能在submod子模块以及main.rs中被访问。
    • submod子模块使用pub修饰符,这样在main.rs中才能访问到该子模块。
    • submod中的func函数使用pub修饰符,这样在main.rs中才能调用该函数。
    • submod中,使用use super::StructA引入外部模块的StructA,这里因为StructA在父模块,所以用super关键字。