Rust 模块系统:控制作用域与私有性
文章目录
- Rust 模块系统:控制作用域与私有性
- 一、模块声明规则
- 二、路径(Paths)访问规则
- 三、私有性控制(`pub` 关键字)
- 四、`use` 关键字:简化路径
- 五、模块树结构示例
- 关键总结
Rust 模块系统:控制作用域与私有性
模块(mod
)是 Rust 组织代码的核心机制,用于封装代码、管理作用域和实现私有性控制。核心概念包括:模块声明、路径(paths)、pub
公开性 和 use
快捷引用。
一、模块声明规则
-
起点:Crate 根文件
- 编译器从 crate 根文件开始编译:
- 库 crate:
src/lib.rs
- 二进制 crate:
src/main.rs
- 库 crate:
- 编译器从 crate 根文件开始编译:
-
声明模块的三种方式
在 crate 根文件声明mod garden;
时,编译器按顺序查找:- 内联代码:
mod garden { /* 代码 */ }
- 文件
src/garden.rs
- 文件
src/garden/mod.rs
- 内联代码:
-
子模块声明
在非根文件(如src/garden.rs
)中声明子模块mod vegetables;
时,查找位置:- 内联代码:
mod vegetables { /* 代码 */ }
- 文件
src/garden/vegetables.rs
- 文件
src/garden/vegetables/mod.rs
- 内联代码:
文件结构示例
backyard ├── Cargo.toml └── src├── garden│ └── vegetables.rs // 子模块代码├── garden.rs // 模块声明└── main.rs // crate 根
二、路径(Paths)访问规则
- 通过路径访问模块内项(如结构体、函数):
crate::garden::vegetables::Asparagus // 绝对路径
- 路径类型:
- 绝对路径:从
crate
根开始 - 相对路径:从
self
(当前模块)或super
(父模块)开始
- 绝对路径:从
三、私有性控制(pub
关键字)
-
默认私有
- 模块内项(函数/结构体等)默认 对父模块私有。
- 子模块可访问父模块,但父模块不能访问子模块私有项。
-
公开作用域
pub mod garden { // 公开模块pub mod vegetables { // 公开子模块pub struct Asparagus; // 公开项} }
pub mod
:使模块可从外部访问pub
修饰项:使模块内的特定项公开
四、use
关键字:简化路径
- 创建快捷方式避免重复长路径:
use crate::garden::vegetables::Asparagus; fn main() {let plant = Asparagus; // 直接使用短名 }
- 常用组合:
use crate::garden::vegetables; // 引入模块,通过 vegetables::Asparagus 访问 use crate::garden::vegetables::Asparagus as Veg; // 重命名
五、模块树结构示例
代码示例(餐厅管理系统):
// src/lib.rs
mod front_of_house { // 模块pub mod hosting { // 子模块(公开)pub fn add_to_waitlist() {} // 公开函数}
}
模块树结构:
crate
└── front_of_house└── hosting└── add_to_waitlist
关键总结
机制 | 作用 | 示例 |
---|---|---|
mod | 声明模块 | mod garden; |
pub | 公开模块或项 | pub fn seat_at_table() |
crate:: | 绝对路径起点 | crate::garden::Asparagus |
use | 创建路径别名 | use crate::garden; |
文件系统映射 | 模块与文件自动关联 | garden.rs → mod garden |
模块系统通过文件路径映射和层级访问控制,实现了代码的高效组织与封装,是 Rust 安全性的重要基石。