Rust 基础: Module 模块系统

Rust 基础: Module 模块系统

正文

1. 简介

在 Rust 中的模块系统感觉与 ESM(ECMAScript Module)非常类似,只是更加严谨,同时也限制了作用域与可见性

模块系统实际上用关键字 mod 就能进行区分,同时也跟 ESM 一样,一个文件将被视为一个单独的模块;而目录则与 ESM 类似,由特殊名称的文件 mod.rs 为代表(就好比 ESM
里面的 index.js 一样)

2. 文件内模块

Rust 默认的入口为 main.rs,我们可以直接在文件内创建新的模块,而模块内的内容默认为 private 的可见性,我们需要有意识的加上 pub 才能变成外部可见

  • /src/main.rs
mod mod_a {
    pub fn f() {
        println!("invoke f in mod_a");
        g();
    }

    fn g() {
        println!("invoke g in mod_a");
    }
}

fn main() {
    mod_a::f();
}
  • 输出
invoke f in mod_a
invoke g in mod_a

3. 单文件模块

第二种我们使用一个独立的文件作为一个模块

  • /src/mod_b.rs
pub fn f() {
    println!("invoke f in mod_b");
}

下面我们只要使用 mod 关键字引入就可以了,默认会在当前目录下(同 crate 下)寻找同名模块

  • /src/main.rs
mod mod_b;

fn main() {
    mod_b::f();
}
  • 输出
invoke f in mod_b

4. 目录为模块

第三种使用一个独立的目录区分不同的模块,记得使用 mod.rs 来作为主入口(起到 index.js 的作用)

  • /src/mod_c/mod.rs
pub fn f() {
    println!("invoke f in mod_c");
}
  • /src/main.rs
mod mod_c;

fn main() {
    mod_c::f();
}
  • 输出
invoke f in mod_c

5. 目录下其他模块

目录下的其他模块就跟在文件内定义的模块一样,需要使用 pub,并在 mod.rs 主入口文件导出才行

  • /src/mod_c/mod_d.rs
pub fn f() {
    println!("invoke f in mod_d");
}
  • /src/mod_c/mod.rs
pub mod mod_d;

使用 pub 关键字导出!

  • /src/main.rs
mod mod_c;

fn main() {
    mod_c::mod_d::f();
}

或是可以使用 use 关键字

mod mod_c;
fn main() {
    use mod_c::mod_d;
    
    mod_d::f();
}
  • 输出
invoke f in mod_d

其他资源

参考连接

TitleLink
File hierarchy - Rust by Examplehttps://doc.rust-lang.org/rust-by-example/mod/split.html

完整代码示例

https://github.com/superfreeeee/Blog-code/tree/main/back_end/rust/rust_module

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值