08 rust基础module 模块
Rust 中的模块(Module)
模块(Module) 是 Rust 中用来组织代码的主要工具,它允许你将代码划分为多个逻辑单元,从而提高可读性和可维护性。模块可以包含函数、结构体、枚举、常量、trait 等,也可以嵌套子模块。
模块的定义与使用
1. 模块的定义
可以使用 mod
关键字定义一个模块:
mod my_module { pub fn greet() { println!("Hello from my_module!"); } }
这里的 my_module
是模块的名字。
2. 使用模块
模块内部的内容默认是私有的,需要通过 pub
关键字公开后才能在模块外访问:
mod my_module { pub fn greet() { println!("Hello from my_module!"); } } fn main() { my_module::greet(); // 调用模块中的函数 }
3. 嵌套模块
模块可以嵌套,也可以通过路径访问:
mod outer_module { pub mod inner_module { pub fn greet() { println!("Hello from inner_module!"); } } } fn main() { outer_module::inner_module::greet(); }
模块的文件结构
单文件模块
所有代码可以写在一个文件里,用 mod
定义模块。
多文件模块
当代码量较大时,可以将模块拆分为多个文件。
例如:
-
创建
main.rs
:mod my_module; fn main() { my_module::greet(); } -
创建
my_module.rs
文件:pub fn greet() { println!("Hello from a separate file!"); }
这样,my_module
模块的实现就放在了单独的文件中。
模块目录结构
如果模块有子模块,可以使用目录结构。例如:
src/ ├── main.rs ├── outer_module/ │ ├── mod.rs │ └── inner_module.rs
outer_module/mod.rs
文件定义outer_module
模块。outer_module/inner_module.rs
定义子模块inner_module
。
使用 use
简化模块路径
1. 引入模块路径
使用 use
可以将模块路径引入当前作用域,简化访问:
mod my_module { pub fn greet() { println!("Hello!"); } } use my_module::greet; fn main() { greet(); // 不需要写 my_module::greet }
2. 重命名
可以通过 as
重命名模块路径:
mod my_module { pub fn greet() { println!("Hello!"); } } use my_module::greet as say_hello; fn main() { say_hello(); // 使用重命名后的路径 }
3. 引入多个内容
用大括号引入多个模块内容:
mod my_module { pub fn greet() { println!("Hello!"); } pub fn farewell() { println!("Goodbye!"); } } use my_module::{greet, farewell}; fn main() { greet(); farewell(); }
常见模块相关关键字
mod
: 定义模块。pub
: 将模块的内容公开。use
: 引入模块路径到当前作用域。super
: 引用父模块。self
: 引用当前模块。
总结
-
模块的作用:
- 组织代码,提高可读性和复用性。
- 封装实现,暴露公共接口。
-
文件与模块的关系:
- 模块可以拆分为多个文件,文件名和模块名一致。
- 使用文件夹管理模块可以构建复杂的项目结构。
-
模块的访问:
- 默认私有,使用
pub
公开。 - 使用
use
简化路径访问。
- 默认私有,使用
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!