使用模块组织代码
学习使用 Rust 的模块系统对代码进行逻辑分组、管理可见性,并让项目具备可扩展性。
使用模块组织代码 是 CoddyKit 上的免费 Learn Rust Coding 课时。 这是第 1 节课,共 3 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn Rust Coding 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn Rust Coding 课程共包含 3 节课。
使用模块组织代码
随着 Rust 项目不断增大,将所有代码放在一个文件中会变得杂乱。Rust 的模块系统可以帮助您将代码组织成符合逻辑的单元。
模块就像代码的文件夹。它们将相关的函数、结构体、枚举和常量归类在一起,从而提高可读性和可维护性。
声明您的第一个模块
您可以使用 mod 关键字声明模块,后面跟上模块名称。这就像在程序中创建一个子命名空间。
让我们创建一个简单的 greetings 模块:
mod greetings {
// This is where greeting functions would go
}
fn main() {
println!("Hello from main!");
}了解模块的私有性
默认情况下,模块中的所有内容都是私有的。这意味着如果不明确将其设为公开,您就无法从模块外部访问它。
如果您尝试调用私有函数,Rust 将会报告编译错误。请尝试取消下面代码行的注释并运行它:
mod greetings {
fn hello() {
println!("Hello from the greetings module!");
}
}
fn main() {
// Uncomment the line below and try to run!
// greetings::hello();
println!("Main function running.");
}使用 `pub` 公开项目
若要让某个项目(例如函数、结构体或枚举)可以从其模块外部访问,请使用 pub 关键字。
pub fn会将函数设为公开。pub struct会将结构体设为公开。pub mod会将子模块设为公开,从而允许访问其中的内容。
私有性是 Rust 安全性和代码组织的核心部分!
`pub` 实战
现在,让我们使用 pub 将 hello 函数设为公开。这样,main 函数就可以调用它,而不会产生私有性错误。
运行这段代码,查看模块输出的问候语:
mod greetings {
pub fn hello() {
println!("Hello from the greetings module!");
}
}
fn main() {
greetings::hello();
}使用 `use` 简化路径
反复输入 greetings::hello() 这样的完整路径可能会很繁琐。use 关键字可以将项目引入作用域,让您更容易引用它们。
它类似于 Python 中的 import 或 C# 中的 using。您可以将某个具体项目或整个模块引入作用域。
`use` 实战
下面展示如何使用 use 缩短 hello 函数的路径。请注意,我们不再需要 greetings:: 前缀。
这样可以让代码更简洁、更易读。
mod greetings {
pub fn hello() {
println!("Hello, module user!");
}
}
use greetings::hello; // Bring `hello` into scope
fn main() {
hello(); // Now we can call it directly
}嵌套模块和相对路径
模块可以嵌套!您可以在其他模块内部定义模块,以实现更细致的组织。为了在这些模块之间导航,Rust 提供了 super 和 self。
super指向父模块。self指向当前模块。
在复杂的模块层次结构中,这些关键字对于使用相对路径很有用。
mod outer {
pub mod inner {
pub fn call_me() {
println!("Called from inner module!");
}
}
pub fn call_inner() {
// Accessing inner module from parent
inner::call_me();
}
}
fn main() {
outer::call_inner();
outer::inner::call_me();
}模块与文件结构
对于较大的模块,您可以将其代码放入单独的文件中。Rust 会自动在特定位置查找模块定义:
- 对于
src/main.rs中的mod my_module;,Rust 会查找src/my_module.rs或src/my_module/mod.rs。 - 这样可以保持主文件整洁,并将内容交给合适的文件管理。
本课程为了简单起见使用单个文件,但请在更大的项目中记住这一点!
模块访问检查
请考虑下面的 Rust 代码。哪些代码行可以在不产生私有性错误的情况下编译?
mod calculator {
fn add(a: i32, b: i32) -> i32 {
a + b
}
pub fn subtract(a: i32, b: i32) -> i32 {
a - b
}
mod advanced {
pub fn multiply(a: i32, b: i32) -> i32 {
a * b
}
}
}
fn main() {
// Line A
// calculator::add(5, 3);
// Line B
// calculator::subtract(10, 4);
// Line C
// calculator::advanced::multiply(2, 6);
// Line D
// calculator::advanced::add(1, 1);
}模块:组织与控制
做得很好!您已经了解了 Rust 模块系统如何帮助您组织代码:
- 使用
mod声明模块和子模块。 - 项目默认是私有的;使用
pub使其可访问。 use可以简化指向项目的长路径。- 大型项目可以将模块拆分到多个文件中。
模块是管理 Rust 复杂性的基础。请继续练习!
常见问题解答
「使用模块组织代码」课时是免费的吗?
是的 — 「使用模块组织代码」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn Rust Coding 课程的其余内容,请升级到 CoddyKit PRO。 Learn Rust Coding 课程共包含 3 节课。
「使用模块组织代码」这节课中我会学到什么?
学习使用 Rust 的模块系统对代码进行逻辑分组、管理可见性,并让项目具备可扩展性。 你通过在浏览器中直接运行的动手代码来练习 Learn Rust Coding,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Learn Rust Coding 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Learn Rust Coding 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 3 节。
「使用模块组织代码」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Learn Rust Coding 课中编写并运行代码吗?
能。每节 Learn Rust Coding 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。