08 rust基础module 模块

Rust 中的模块(Module)

模块(Module) 是 Rust 中用来组织代码的主要工具,它允许你将代码划分为多个逻辑单元,从而提高可读性和可维护性。模块可以包含函数、结构体、枚举、常量、trait 等,也可以嵌套子模块。


模块的定义与使用

1. 模块的定义

可以使用 mod 关键字定义一个模块:

mod my_module {
pub fn greet() {
println!("Hello from my_module!");
}
}

这里的 my_module 是模块的名字。

2. 使用模块

模块内部的内容默认是私有的,需要通过 pub 关键字公开后才能在模块外访问:

mod my_module {
pub fn greet() {
println!("Hello from my_module!");
}
}
fn main() {
my_module::greet(); // 调用模块中的函数
}

3. 嵌套模块

模块可以嵌套,也可以通过路径访问:

mod outer_module {
pub mod inner_module {
pub fn greet() {
println!("Hello from inner_module!");
}
}
}
fn main() {
outer_module::inner_module::greet();
}

模块的文件结构

单文件模块

所有代码可以写在一个文件里,用 mod 定义模块。

多文件模块

当代码量较大时,可以将模块拆分为多个文件。

例如:

  1. 创建 main.rs

    mod my_module;
    fn main() {
    my_module::greet();
    }
  2. 创建 my_module.rs 文件:

    pub fn greet() {
    println!("Hello from a separate file!");
    }

这样,my_module 模块的实现就放在了单独的文件中。

模块目录结构

如果模块有子模块,可以使用目录结构。例如:

src/
├── main.rs
├── outer_module/
│ ├── mod.rs
│ └── inner_module.rs
  • outer_module/mod.rs 文件定义 outer_module 模块。
  • outer_module/inner_module.rs 定义子模块 inner_module

使用 use 简化模块路径

1. 引入模块路径

使用 use 可以将模块路径引入当前作用域,简化访问:

mod my_module {
pub fn greet() {
println!("Hello!");
}
}
use my_module::greet;
fn main() {
greet(); // 不需要写 my_module::greet
}

2. 重命名

可以通过 as 重命名模块路径:

mod my_module {
pub fn greet() {
println!("Hello!");
}
}
use my_module::greet as say_hello;
fn main() {
say_hello(); // 使用重命名后的路径
}

3. 引入多个内容

用大括号引入多个模块内容:

mod my_module {
pub fn greet() {
println!("Hello!");
}
pub fn farewell() {
println!("Goodbye!");
}
}
use my_module::{greet, farewell};
fn main() {
greet();
farewell();
}

常见模块相关关键字

  • mod: 定义模块。
  • pub: 将模块的内容公开。
  • use: 引入模块路径到当前作用域。
  • super: 引用父模块。
  • self: 引用当前模块。

总结

  1. 模块的作用

    • 组织代码,提高可读性和复用性。
    • 封装实现,暴露公共接口。
  2. 文件与模块的关系

    • 模块可以拆分为多个文件,文件名和模块名一致。
    • 使用文件夹管理模块可以构建复杂的项目结构。
  3. 模块的访问

    • 默认私有,使用 pub 公开。
    • 使用 use 简化路径访问。
posted @   代码世界faq  阅读(32)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示