0Pricing
Learn Rust Coding · 课时

模块与 mod

组织代码

模块与 mod 是 CoddyKit 上的免费 Learn Rust Coding 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Learn Rust Coding 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Learn Rust Coding 课程共包含 4 节课。

为什么需要模块

随着程序不断变大,把所有内容放在一个文件中会变得杂乱。模块可以让您将相关代码分组,控制哪些内容是公开的,并避免名称冲突。

mod 关键字用于声明模块。

声明内联模块

您可以使用 mod name { ... } 直接在文件中定义模块。大括号之间的所有内容都属于该模块。

mod greetings {
    fn hello() {
        println!("hello from the module");
    }
}

fn main() {
    println!("module declared above");
}

调用模块函数

模块中的项目默认是私有的。要从外部调用某个项目,它必须是 pub,并且要使用包含模块路径的 :: 来引用它。

mod greetings {
    pub fn hello() {
        println!("hello!");
    }
}

fn main() {
    greetings::hello();
}

嵌套模块

模块可以包含其他模块,从而形成一棵树。路径会使用 :: 分隔并列出每一层。

mod app {
    pub mod ui {
        pub fn draw() {
            println!("drawing ui");
        }
    }
}

fn main() {
    app::ui::draw();
}

模块不只用于分组函数

模块可以包含函数、结构体、枚举、常量,甚至其他模块。这样可以将相关类型和行为放在一起。

mod shapes {
    pub struct Circle {
        pub radius: f64,
    }
    pub const PI: f64 = 3.14159;
}

fn main() {
    let c = shapes::Circle { radius: 2.0 };
    println!("area = {}", shapes::PI * c.radius * c.radius);
}

模块树

每个 crate 都有一个根模块。您声明的模块会在其下方形成一棵树。路径描述项目所在的位置,类似于文件系统中的文件夹。

super:父模块

在模块内部,super 指代父模块。它允许子模块调用上一级定义的内容。

fn top_level() {
    println!("called via super");
}

mod inner {
    pub fn run() {
        super::top_level();
    }
}

fn main() {
    inner::run();
}

self:当前模块

self 指代当前模块。它主要用于明确说明项目在路径中的位置。

mod tools {
    pub fn helper() {
        println!("helper running");
    }
    pub fn run() {
        self::helper();
    }
}

fn main() {
    tools::run();
}

分文件存放模块

除了内联模块之外,mod network;(带分号且没有主体)还会告诉 Rust 从 network.rs 或 network/mod.rs 加载内容。

真实项目正是通过这种方式将代码拆分到多个文件中,同时保持一棵模块树。

隐私边界

模块构成隐私边界。子模块可以看到祖先模块的私有项目,但父模块无法访问子模块的私有项目。

这种封装可以隐藏内部细节。

mod bank {
    fn secret() -> i32 { 42 }
    pub fn reveal() -> i32 { secret() }
}

fn main() {
    println!("{}", bank::reveal());
}

组织真实项目

使用模块来反映您的领域,例如 auth、db 和 handlers。让每个模块各司其职,只公开少量接口,其余内容保持隐藏。

清晰的模块边界可以让大型代码库更易于浏览。

快速检查

测试您对模块的了解。

回顾

您已经学会使用模块组织代码:

  • mod name { ... }声明一个内联模块
  • 项目默认是私有的;使用pub将其公开
  • 使用::路径遍历模块树
  • super、self和mod name;用于导航和拆分模块

常见问题解答

「模块与 mod」课时是免费的吗?

是的 — 「模块与 mod」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Learn Rust Coding 课程的其余内容,请升级到 CoddyKit PRO。 Learn Rust Coding 课程共包含 4 节课。

「模块与 mod」这节课中我会学到什么?

组织代码 你通过在浏览器中直接运行的动手代码来练习 Learn Rust Coding,全天候 AI 导师会在你学习这节课的过程中回答你的问题。

学习 Learn Rust Coding 需要有经验吗?

无需任何先前经验。CoddyKit 上的 Learn Rust Coding 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。

「模块与 mod」课时需要多长时间?

大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。

我能在这节 Learn Rust Coding 课中编写并运行代码吗?

能。每节 Learn Rust Coding 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。

此课程中的所有课时

  1. 模块与 mod
  2. pub 与可见性
  3. use 与路径
  4. Crate 与 Crate 根
← 返回 Learn Rust Coding