Rust语言从入门到入坑——(6)Rust组织管理

news2025/1/10 10:47:04

文章目录

  • 0 引入
  • 1、组织概念
    • 1. 1、箱
    • 1. 2、包
    • 1. 3、模块
  • 2、组织中权限
    • 2.1 权限
    • 2.2 模块引用
    • 2.2 Use 关键词
  • 3、总结


在这里插入图片描述

0 引入

任何一门编程语言如果不能组织代码都是难以深入的,几乎没有一个软件产品是由一个源文件编译而成的。本教程到目前为止所有的程序都是在一个文件中编写的,主要是为了方便学习 Rust 语言的语法和概念。对于一个工程来讲,组织代码是十分重要的。Rust 中有三个重要的组织概念:箱、包、模块。


1、组织概念

下面是按照逐渐递增大小关系说明的

1. 1、箱

1、"箱"是二进制程序文件或者库文件,存在于"包"中。
2、"箱"是树状结构的,它的树根是编译器开始运行时编译的源文件所编译的程序。
3、注意:“二进制程序文件"不一定是"二进制可执行文件”,只能确定是是包含目标机器语言的文件,文件格式随编译环境的不同而不同。

1. 2、包

1、当我们使用 Cargo 执行 new 命令创建 Rust 工程时,工程目录下会建立一个 Cargo.toml 文件。工程的实质就是一个包,包必须由一个 Cargo.toml 文件来管理,该文件描述了包的基本信息以及依赖项
2、一个包最多包含一个库"箱",可以包含任意数量的二进制"箱",但是至少包含一个"箱"(不管是库还是二进制"箱")。
3、当使用 cargo new 命令创建完包之后,src 目录下会生成一个 main.rs 源文件,Cargo 默认这个文件为二进制箱的根,编译之后的二进制箱将与包名相同。

1. 3、模块

1、对于一个软件工程来说,我们往往按照所使用的编程语言的组织规范来进行组织,组织模块的主要结构往往是树。Java 组2、织功能模块的主要单位是类,而 JavaScript 组织模块的主要方式是 function。
这些先进的语言的组织单位可以层层包含,就像文件系统的目录结构一样。Rust 中的组织单位是模块(Module)。
3、在文件系统中,目录结构往往以斜杠在路径字符串中表示对象的位置,Rust 中的路径分隔符是 :: 。
路径分为绝对路径和相对路径。绝对路径从 crate 关键字开始描述。相对路径从 self 或 super 关键字或一个标识符开始描述。

mod nation {
    mod government {
        fn govern() {}
    }
    mod congress {
        fn legislate() {}
    }
    mod court {
        fn judicial() {}
    }
}

//访问时候可以使用 相对路径也可以使用绝对路径
crate::nation::government::govern();    //绝对
nation::government::govern();           //相对

2、组织中权限

2.1 权限

  • Rust 中有两种简单的访问权:公共(public)和私有(private)。
  • 默认情况下,如果不加修饰符,模块中的成员访问权将是私有的。
  • 如果想使用公共权限,需要使用 pub 关键字。
  • 对于私有的模块,只有在与其平级的位置或下级的位置才能访问,不能从其外部访问。
  • 如果模块中定义了结构体,结构体除了其本身是私有的以外,其字段也默认是私有的。所以如果想使用模块中的结构体以及其字段,需要 pub 声明(枚举不具备该性质)。
mod nation {
    pub mod government {
        pub fn govern() {}
    }
    mod congress {
        pub fn legislate() {}
    }
    mod court {
        fn judicial() {
            super::congress::legislate();
        }
    }
}
fn main() {
    nation::government::govern();
}

2.2 模块引用

现在两个模块
test1.rs 代码如下

pub fn message() -> String {
    String::from("This is the 2nd module.")
}

main.rs 代码如下

mod test1;

fn main() {
    println!("This is the main module.");
    println!("{}", second_module::message());
}

这样是可以引用成功的。

2.2 Use 关键词

使用use可以引用标准库,也可以引用自定义的,这样就比较方便,解决了局部模块路径过长的问题。和python中的 import有点类似,和C++中的use namespace用法异曲同工。当然也可以使用use xxx as 作为别名使用
代码如下(示例):

mod nation {
    pub mod government {
        pub fn govern() {}
    }
}
use crate::nation::government::govern;       // use 过之后
use crate::nation::govern as nation_govern;  // 别名

fn main() {
	nation_govern();
    govern();
}

Rust 官方标准库字典:https://doc.rust-lang.org/stable/std/all.html


3、总结

Rust 组织管理在进行大规模的工程构建中可以更好的组织,划分模块。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/680473.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

java——内部类和异常处理

文章目录 内部类成员内部类局部内部类匿名内部类静态内部类 异常处理异常捕获与处理多重异常捕获和处理抛出异常 内部类 Java内部类(Inner Class)是嵌套在其他类中的类,它可以访问外部类的成员变量和方法,同时也可以被外部类访问…

模拟电路系列文章-ADC驱动电路(下)

目录 概要 整体架构流程 技术名词解释 技术细节 1.低阻输出,以减小误差 2.抗混叠 3.电源级保护 小结 概要 提示:这里可以添加技术概要 一个模拟电压信号,在进入ADC 的输入端之前,一般都需要增加一级驱动电路(Driver]。但是&#…

C语言基础:指针的使用

本文结合工作经验,研究C语言中指针的用法。 文章目录 1 指针的概念2 用法与使用场景2.1 函数的指针参数2.1.1 基本概念2.1.2 使用场景1-函数返回多个值2.1.3 使用场景2-减少函数参数 2.2 void*指针2.2.1 基本概念2.2.2 使用场景 2.3 空指针2.4 const指针2.4.1 基本…

三分钟学习一个python小知识5-----------我的对python中pandas的理解, 我列举了关于pandas常用的4个例子来深入理解pandas

这里写目录标题 1、Pandas是什么2、Pandas的常用功能:2.1. 读取和写入数据2.2. 数据清洗和转换2.3. 数据分析和计算2.4. 数据可视化总结 1、Pandas是什么 Pandas是Python中一个非常流行的数据处理和分析库,可以使用它对数据进行读取、清洗、转换、分析和…

【动态规划算法练习】day4

文章目录 一、213. 打家劫舍 II1.题目简介2.解题思路3.代码4.运行结果 二、740. 删除并获得点数1.题目简介2.解题思路3.代码4.运行结果 三、剑指 Offer II 091. 粉刷房子1.题目简介2.解题思路3.代码4.运行结果 总结 一、213. 打家劫舍 II 1.题目简介 213. 打家劫舍 II 你是一…

数字IC工程师的护城河是什么?

每个人都希望能够增加⾃⼰的核心竞争⼒,然后延展职业⽣涯。 可能IC研发工程师基本上都会有个40岁危机? 时代背景是最⼤的变数,它改变了⼈才供需和技术⾛向,⽐如做处理器 core曾经是屠⻰术,⽽现在是⻩⾦时代 处理器 cor…

堆和优先队列

文章目录 堆维护堆的性质建堆堆排序算法 优先队列详解cpp标准库 priority_queue 参考文献 堆 虽然“堆”这个词源自堆排序,但是目前它已经被引申为“垃圾存储机制”,例如在Java和Lisp语言中所定义的。强调一下,我们使用的堆不是垃圾收集存储…

设计模式之访问者模式笔记

设计模式之访问者模式笔记 说明Iterator(访问者)目录访问者模式示例类图抽象访问者角色类抽象元素角色类宠物猫类宠物狗类自己类其他人类家类测试类 说明 记录下学习设计模式-访问者模式的写法。JDK使用版本为1.8版本。 Iterator(访问者) 意图:表示一个作用于某对象结构中的…

平面设计师实习报告范文十篇

平面设计师实习报告范文1 经过了四年的系统性理论学习,使我对平面设计有了基本掌握,对于平面设计这个专业也有了一个系统的了解和掌握。我们即将离开大学校园,作为平面设计专业的毕业生,心中想得更多的是如何去做好一个平面设计师…

ETCD集群运维

ETCD集群运维 ETCD扩容节点ETCD参数调优时间参数快照磁盘网络 监控维护压缩历史版本消除碎片化存储配额快照备份 灾难恢复快照恢复 etcd gateway作用什么时候不应该使用网关启动方式 gRPC代理可扩展的watch API租约请求缓存启动gRPC代理 ETCD扩容节点 节点1:10.1.1…

管理类联考——逻辑——知识篇——论证推理——一、削弱——haimian

削弱 考点分析 削弱 年度 2012 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023题量223262132 主要问法 以下哪项如果为真,则能最严重地削弱(反驳)上述结论?以下哪项如果为真,则最能削弱(反驳&#xff09…

文心一言 VS 讯飞星火 VS chatgpt (46)-- 算法导论6.1 4题

四、假设一个最大堆的所有元素都不相同,那么该堆的最小元素应该位于哪里? 文心一言: 最大堆的最小元素位于堆的根结点。由于最大堆的性质,根结点是堆中所有元素的最大值,因此它也是堆中所有元素的最小值。 讯飞星火&#xff1a…

工具及方法 - 如何进行任务管理

如何做好你该做的事,这是你的一生之敌。 没有一步到位的工具和一劳永逸的方法,只有不断变化的需求和自己用起来顺手的感觉。 对于GTD工具,在手机上安装过番茄工作法的工具,在电脑的Excel上也做过任务列表,在免费的项目…

解决 kali换源之后签名无效

报错问题: apt-get update 报错 更新扩展知识:kali更新源 终端输入 vi /etc/apt/sources.list #中科大 deb http://mirrors.ustc.edu.cn/kali kali-rolling main non-free contrib deb-src http://mirrors.ustc.edu.cn/kali kali-rolling main …

计算机视觉中,有哪些基于控制点对的图像变换?

这里探讨的所有图像变换(二维)都是基于控制点对的,它们的主要区别在于: 1、它们是如何通过两张图像的控制点对产生变换场(变换矩阵或者变换公式中的参数)的 2、控制点之间的对应关系严格程度 这里说的变换…

远心镜头案例锦集

远心镜头(Telecentric lens) 定义:远心镜头是一类将其入瞳或出瞳放置于无穷远的光学系统。是为纠正传统镜头视差而设计,它可以在一定的物距范围内,使得到的图像放大倍率不会变化,即这种镜头拍出来的图像没…

人工智能(4):模型评估

模型评估是模型开发过程不可或缺的一部分。它有助于发现表达数据的最佳模型和所选模型将来工作的性能如何。 按照数据集的目标值不同,可以把模型评估分为分类模型评估和回归模型评估。 1 分类模型评估 准确率 预测正确的数占样本总数的比例。 其他评价指标…

嵌入式C开发 VS 嵌入式CPP开发!

目录 ​答主:听心跳的声音 答主:pansz 答主:candy 这是知乎嵌入式领域的一个热门话题,原文链接: https://www.zhihu.com/question/374663834 几个高赞回答: ​答主:听心跳的声音 单片机的主…

多项式回归的原理及实现、多重回归的原理

1.多项式回归的原理及实现 笔记来源于《白话机器学习的数学》 1.1 多项式回归的原理 预测一个变量 x x x与一个变量 y y y的关系 例如:广告费 x x x与点击量 y y y 用曲线拟合数据 求导过程类比本人之前的博客进行推导,相关笔记:最小二乘法的…

Nginx基于授权的访问控制步骤

目录 一、安装httpd-tools 二、生成用户密码认证文件 三、修改主配置文件相对应的目录,添加认证配置置顶 四、 重启服务 五、 访问网址 一、安装httpd-tools 二、生成用户密码认证文件 三、修改主配置文件相对应的目录,添加认证配置置顶 Vim /usr/loc…