文章目录
-
-
- [Rust 模块系统:控制作用域与私有性](#Rust 模块系统:控制作用域与私有性)
-
- 一、模块声明规则
- 二、路径(Paths)访问规则
- [三、私有性控制(`pub` 关键字)](#三、私有性控制(
pub
关键字)) - [四、`use` 关键字:简化路径](#四、
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)访问规则
-
通过路径访问模块内项(如结构体、函数):
rustcrate::garden::vegetables::Asparagus // 绝对路径
-
路径类型:
- 绝对路径 :从
crate
根开始 - 相对路径 :从
self
(当前模块)或super
(父模块)开始
- 绝对路径 :从
三、私有性控制(pub
关键字)
-
默认私有
- 模块内项(函数/结构体等)默认 对父模块私有。
- 子模块可访问父模块,但父模块不能访问子模块私有项。
-
公开作用域
rustpub mod garden { // 公开模块 pub mod vegetables { // 公开子模块 pub struct Asparagus; // 公开项 } }
pub mod
:使模块可从外部访问pub
修饰项:使模块内的特定项公开
四、use
关键字:简化路径
-
创建快捷方式避免重复长路径:
rustuse crate::garden::vegetables::Asparagus; fn main() { let plant = Asparagus; // 直接使用短名 }
-
常用组合:
rustuse crate::garden::vegetables; // 引入模块,通过 vegetables::Asparagus 访问 use crate::garden::vegetables::Asparagus as Veg; // 重命名
五、模块树结构示例
代码示例(餐厅管理系统):
rust
// 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 安全性的重要基石。