Rust 基础: Module 模块系统

news/2024/7/10 16:04:06 标签: rust, 开发语言, 后端, module

Rust 基础: Module 模块系统

文章目录

  • Rust 基础: Module 模块系统
  • 正文
    • 1. 简介
    • 2. 文件内模块
    • 3. 单文件模块
    • 4. 目录为模块
    • 5. 目录下其他模块
  • 其他资源
    • 参考连接
    • 完整代码示例

正文

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


http://www.niftyadmin.cn/n/735141.html

相关文章

systemtap概述及实例

systemtap对用户级和内核级代码提供了静态和动态跟踪的功能。Systemtap采用其他的内核框架做源:静态探针用tracepoints、动态探针用kprobes、用户级别的探针用uprobes。这些源也为perf、LTTng所用。 由于 systemtap 运行需要内核的调试信息支撑,默认发行…

Rust 基础: 三方库依赖 自定义三方库

Rust 基础: 三方库依赖 & 自定义三方库 文章目录Rust 基础: 三方库依赖 & 自定义三方库正文1. 项目类型2. 引入官方三方库3. 自定义三方库3.1 创建库项目3.2 加点内容3.3 引入自定义三方库其他资源参考连接完整代码示例正文 今天来介绍一下如何在 rust 项目中依赖三方…

Rust 内置类型: Box、Option、Result

Rust 内置类型: Box、Option、Result 文章目录Rust 内置类型: Box、Option、Result正文1. Box1.1 创建 Box1.2 修改 Box1.2.1 修改 Box 数据1.2.2 修改 Box 指针1.2.3 引用其他变量2. Option2.1 Option 作为返回值2.2 Option 解包(解构):使用 match2.3 Option 解包&…

Rust 特性: Drop 特性(类 C++ 析构函数)

Rust 特性: Drop 特性(类 C 析构函数) 文章目录Rust 特性: Drop 特性(类 C 析构函数)正文0. 关于析构函数1. 代码实现1.0 Drop 实现1.1 自动回收1.2 主动回收其他资源参考连接完整代码示例正文 0. 关于析构函数 写过 C 的应该都知道,资源被释放的时候会调用析构函…

Django的session学习

session的由来 cookie最大的问题就是键值对保存在客户端的浏览器上,我们看下session是如何保存的呢? 比如一个请求过来,数据是这样的{“username”:"zyb","password":"admin"},这个是时候在服务端这…

技术方案分享: gulp + webpack 联合编译三方库发布版本

技术方案分享: gulp webpack 联合编译三方库发布版本 文章目录技术方案分享: gulp webpack 联合编译三方库发布版本正文0. 打包的目标到底是什么?1. 如何打包?2. 代码示例2.1 创建项目2.2 安装依赖2.3 定义 gulp 工作流2.4 ts、babel 编译配置项2.5 打…

使用openlayers 3 在线加载天地图及GeoServer发布的地图

使用openlayers3来加载天地图卫星图和标注图层&#xff0c;GeoServer发布地图&#xff0c;一并用openlayers测试加载出来&#xff0c;顺便实现了7种地图控件。下面直接贴代码&#xff1a; <!DOCTYPE html> <html> <head> <meta http-equiv"Con…

Yarn 踩坑笔记: 安装异常 资源错误缓存处理(Error: SyntaxError: Invalid or unexpected token)

Yarn 踩坑笔记: 安装异常 资源错误缓存处理(Error: SyntaxError: Invalid or unexpected token) 文章目录Yarn 踩坑笔记: 安装异常 资源错误缓存处理(Error: SyntaxError: Invalid or unexpected token)正文项目背景问题描述解决方案其他资源参考连接完整代码示例正文 项目背景…