当前位置: 首页 > news >正文

Rust 模块系统:控制作用域与私有性

文章目录

      • Rust 模块系统:控制作用域与私有性
        • 一、模块声明规则
        • 二、路径(Paths)访问规则
        • 三、私有性控制(`pub` 关键字)
        • 四、`use` 关键字:简化路径
        • 五、模块树结构示例
        • 关键总结

Rust 模块系统:控制作用域与私有性

模块(mod)是 Rust 组织代码的核心机制,用于封装代码、管理作用域和实现私有性控制。核心概念包括:模块声明路径(paths)pub 公开性use 快捷引用

demo


一、模块声明规则
  1. 起点:Crate 根文件

    • 编译器从 crate 根文件开始编译:
      • 库 crate:src/lib.rs
      • 二进制 crate:src/main.rs
  2. 声明模块的三种方式
    在 crate 根文件声明 mod garden; 时,编译器按顺序查找:

    • 内联代码:mod garden { /* 代码 */ }
    • 文件 src/garden.rs
    • 文件 src/garden/mod.rs
  3. 子模块声明
    在非根文件(如 src/garden.rs)中声明子模块 mod vegetables; 时,查找位置:

    • 内联代码:mod vegetables { /* 代码 */ }
    • 文件 src/garden/vegetables.rs
    • 文件 src/garden/vegetables/mod.rs

文件结构示例

backyard
├── Cargo.toml
└── src├── garden│   └── vegetables.rs  // 子模块代码├── garden.rs         // 模块声明└── main.rs           // crate 根

二、路径(Paths)访问规则
  • 通过路径访问模块内项(如结构体、函数):
    crate::garden::vegetables::Asparagus // 绝对路径
    
  • 路径类型:
    • 绝对路径:从 crate 根开始
    • 相对路径:从 self(当前模块)或 super(父模块)开始

三、私有性控制(pub 关键字)
  1. 默认私有

    • 模块内项(函数/结构体等)默认 对父模块私有
    • 子模块可访问父模块,但父模块不能访问子模块私有项。
  2. 公开作用域

    pub mod garden {          // 公开模块pub mod vegetables {   // 公开子模块pub struct Asparagus; // 公开项}
    }
    
    • pub mod:使模块可从外部访问
    • pub 修饰项:使模块内的特定项公开

四、use 关键字:简化路径
  • 创建快捷方式避免重复长路径:
    use crate::garden::vegetables::Asparagus;
    fn main() {let plant = Asparagus; // 直接使用短名
    }
    
  • 常用组合:
    use crate::garden::vegetables; // 引入模块,通过 vegetables::Asparagus 访问
    use crate::garden::vegetables::Asparagus as Veg; // 重命名
    

五、模块树结构示例

代码示例(餐厅管理系统):

// src/lib.rs
mod front_of_house {     // 模块pub mod hosting {     // 子模块(公开)pub fn add_to_waitlist() {} // 公开函数}
}

模块树结构

crate
└── front_of_house└── hosting└── add_to_waitlist

关键总结
机制作用示例
mod声明模块mod garden;
pub公开模块或项pub fn seat_at_table()
crate::绝对路径起点crate::garden::Asparagus
use创建路径别名use crate::garden;
文件系统映射模块与文件自动关联garden.rsmod garden

模块系统通过文件路径映射和层级访问控制,实现了代码的高效组织与封装,是 Rust 安全性的重要基石。

http://www.dtcms.com/a/276999.html

相关文章:

  • python 虚拟环境 Anaconda Miniconda
  • 大模型的Temperature、Top-P、Top-K、Greedy Search、Beem Search
  • jeepay开源项目开发中金支付如何像其他支付渠道对接那样简单集成,集成服务商模式,极简集成工具。
  • AI驱动的软件工程(中):文档驱动的编码与执行
  • 深入解析 ArrayList
  • XGBoost三部曲:XGBoost原理
  • Docker一键安装中间件(RocketMq、Nginx、MySql、Minio、Jenkins、Redis)脚步
  • Transformer 小记(一):深入理解 Transformer 中的位置关系
  • 【PTA数据结构 | C语言版】字符串截取子串操作
  • ABP VNext + 多级缓存架构:本地 + Redis + CDN
  • ref 和 reactive
  • EWSGAN:自动搜索高性能的GAN生成器架构
  • LeetCode 1156.单字符重复子串的最大长度
  • 维基艺术图片: 数据标注 (2)
  • C语言基础教程(002):变量介绍
  • 一文读懂现代卷积神经网络—使用块的网络(VGG)
  • 基于Prompt结构的语校解析:3H日本语学校信息建模实录(4/500)
  • 08.如何正确关闭文件
  • 数智管理学(三十三)
  • 归并排序递归法和非递归法的简单简单介绍
  • Gin框架统一响应与中间件机制学习笔记
  • DH(Denavit–Hartenberg)矩阵
  • KL散度:信息差异的量化标尺 | 从概率分布对齐到模型优化的核心度量
  • 使用QtTest
  • 反激变换器设计全流程(一)——电路拓扑及工作流程
  • Chrome v109.0.5414.168 绿色便携版 Windows 7/2012R2 最终版 下载
  • 开发语言的优劣势对比及主要应用领域分析
  • GROW领导力模型
  • Unity物理系统由浅入深第四节:物理约束求解与稳定性
  • 【算法分析与设计】研究生第一次算法作业latex源码+pdf