0Pricing
Learn Rust Coding · 课时

使用模块组织代码

学习使用 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 反馈 — 无需本地设置。

此课程中的所有课时

  1. 使用模块组织代码
  2. 使用 crate 管理依赖
  3. 使用 `Result` 进行健壮的错误处理
← 返回 Learn Rust Coding