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);
}
}
main.rs
代码:
// 引入mod.rs中的内容,因为mod.rs和main.rs在同一目录,默认会引入
mod mod;
fn main() {
let s = mod::StructA { field: 42 };
mod::submod::func(&s);
}
- 访问控制修饰符说明:
- 在
mod.rs
中,StructA
结构体需要使用pub
修饰符,这样才能在submod
子模块以及main.rs
中被访问。
submod
子模块使用pub
修饰符,这样在main.rs
中才能访问到该子模块。
submod
中的func
函数使用pub
修饰符,这样在main.rs
中才能调用该函数。
- 在
submod
中,使用use super::StructA
引入外部模块的StructA
,这里因为StructA
在父模块,所以用super
关键字。