【Rust自学】7.6. 将模块拆分为不同文件
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)
7.6.1. 将模块的内容移动到其他文件
如果在模块定义时模块名后边跟的是;而不是代码块,Rust就会在src目录下找与模块同名的.rs文件加载其中的内容。无论模块的内容是在同一个文件里面还是在不同的文件里面,模块树的结构都不会发生变化。
来看一个例子:
mod front_of_house { pub mod hosting { pub fn add_to_waitlist() { } }
} pub use crate::front_of_house::hosting::add_to_waitlist; pub fn eat_at_restaurant() { add_to_waitlist();
}
这样写就是把所有模块放在同一个文件里。如果要把它放在不同的文件里,就要这么写:
Step 1:新建文件
假如要把front_of_house分出去,就需要在src目录下创建同名的.rs文件:

Step 2:剪切代码
把原本在front_of_house下的代码从原位置剪切到这个front_of_house.rs这个文件里,也就是把这一段剪切走:
pub mod hosting { pub fn add_to_waitlist() { } }

Step 3:修改原处
打开front_of_house所在的原处,这个时候就不用后面的代码块了,把它连着{}都删去,加上;即可(其它的无关代码不要动),原本代码是:
mod front_of_house { pub mod hosting { pub fn add_to_waitlist() { } }
} pub use crate::front_of_house::hosting::add_to_waitlist; pub fn eat_at_restaurant() { add_to_waitlist();
}
改成:
mod front_of_house;pub use crate::front_of_house::hosting::add_to_waitlist; pub fn eat_at_restaurant() { add_to_waitlist();
}

7.6.2. 子模块的拆分
需要注意的是,如果想把模块下的子模块拆出来,就需要新建父模块的同名文件夹,在这个文件下方.rs文件用于存储子模块或是条目。
举个例子,如果我要把hosting独立出去成一个单独的文件,操作不仅仅是创建一个同名.rs文件,而是需要先新建一个父模块的同名文件夹,在这个例子中父模块的名字是front_of_house,所以就要创建名字为front_of_house的文件夹。
然后再在这个文件夹下创建与条目名/模块名相同的.rs文件,在这个例子中是要把hosting独立出去,所以这个文件应该叫做hosting.rs。

在hosting.rs里存储hosting的内容,也就是:
pub mod hosting { pub fn add_to_waitlist() { }
}

如果不想要同名的文件和文件夹,可以把文件放进文件夹并把文件改名为mod.rs!!!
7.6.3. 拆分的优点
随着模块变大,该技术让程序员可以把模块的内容移动到其他文件中。
相关文章:
【Rust自学】7.6. 将模块拆分为不同文件
喜欢的话别忘了点赞、收藏加关注哦(加关注即可阅读全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 7.6.1. 将模块的内容移动到其他文件 如果在模块定义时模块名后边跟的是;而不是代码块&#…...
Python入门:8.Python中的函数
引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始…...
MySQL什么情况下会加间隙锁?
目录 一、使用范围条件查询 二、唯一索引的范围查询 三、普通索引的查询 四、间隙锁的锁定规则 五、间隙锁的影响 间隙锁(Gap Lock)是MySQL中的一种锁机制,主要用于防止幻读现象。在MySQL的InnoDB存储引擎中,当事务隔离级别设置为可重复读(Repeatable Read)时,间隙…...
【服务器开发及部署】code-server 显示git graph
在开发一些linux上的内容的时候进程需要在开发机和生产部署上花费大量的时间。 为了解决上述问题,我们今天介绍一款在服务上开发的思路 git + code server + 宝塔 其中需要处理一些问题,此处都有交代 步骤 安装宝塔安装code-server配置插件配置浏览器处理的问题 git版本过低,…...
Linux 终端查看 nvidia 显卡型号
文章目录 写在前面1. 需求描述2. 实现方法方法一:方法二方法三: 参考链接 写在前面 自己的测试环境: Ubuntu20.04 1. 需求描述 Linux 终端查看 nvidia 显卡型号 2. 实现方法 方法一: 执行下列指令: sudo update…...
助你通过AI培训师中级考试的目录索引
嘿,各位看官!在您正式踏入接下来的知识小宇宙之前,咱先唠唠几句… 家人们,我跟你们说,我脑一热报名了那个 AI 培训师考试。本想着开启一场知识的奇幻之旅,结果呢,学视频内容的时候,那…...
百度PaddleSpeech识别大音频文件报错
一、背景 公司前同事留下了一套语音识别项目,内部使用百度PaddleSpeech。在项目验收的时候发现无法识别大音频文件,但是可以识别小音频文件。 这套项目是通过python调用的百度PaddleSpeech,然后提供了restful接口,然后java项目可…...
Lucene 漏洞历险记:修复损坏的索引异常
作者:来自 Elastic Benjamin Trent 有时,一行代码需要几天的时间才能写完。在这里,我们可以看到工程师在多日内调试代码以修复潜在的 Apache Lucene 索引损坏的痛苦。 做好准备 这篇博客与往常不同。它不是对新功能或教程的解释。这是关于花…...
RabbitMQ基础篇之快速入门
文章目录 一、目标需求二、RabbitMQ 控制台操作步骤1.创建队列2.交换机概述3.向交换机发送消息4.结果分析5.消息丢失原因 三、绑定交换机与队列四、测试消息发送五、消息查看六、结论 一、目标需求 新建队列:创建 hello.queue1 和 hello.queue2 两个队列。消息发送…...
如何自定义 Kubernetes KubeSphere 默认 Logo:详细实现方案
要将 Pod 中的路径 /opt/kubesphere/console/dist/assets/logo.svg 替换为外部的某个图片,可以通过以下几种方法处理。推荐使用 挂载 ConfigMap 或 Secret 的方式,因为它是 Kubernetes 原生的、可持续的解决方案。 方法 :使用 ConfigMap 挂载…...
标准库以及HAL库——按键控制LED灯代码
按键控制LED本质还是控制GPIO,和点亮一个LED灯没什么区别 点亮一个LED灯:是直接控制输出引脚,GPIO初始化推挽输出即可 按键控制LED:是按键输入信号从而控制输出引脚,GPIO初始化推挽输出一个引脚以外还得加一个GPIO上拉输入 但是…...
Echarts+vue电商平台数据可视化——webSocket改造项目
websocket的基本使用,用于测试前端能否正常获取到后台数据 后台代码编写: const path require("path"); const fileUtils require("../utils/file_utils"); const WebSocket require("ws"); // 创建WebSocket服务端的…...
Flink中并行度和slot的关系——任务和任务槽
一、任务槽(task slots) Flink的每一个TaskManager是一个JVM进程,在其上可以运行多个线程(任务task),那么每个线程可以拥有多少进程资源呢?任务槽就是这样一个概念,对taskManager上每个任务运行…...
基于西湖大学强化学习课程的笔记
放在前面 课程链接 2024年12月30日 前言:强化学习有原理部分的学习,也有与实践相关的编程部分。我认为实践部分应该是更适合我的,不过原理部分也很重要,我目前是准备先过一过原理。 应该花多少时间学习这部分呢? 但是这…...
瀚高数据库 问题: ERROR: operator does not exist: character varying = integer
错误信息: ERROR: operator does not exist: character varying integer建议:No operator matches the given name and argument types. You might need to add explicit type casts.位置:1073at 增加瀚高数据库转换函数解决该问题ÿ…...
冷链温度记录仪蓝牙应用案例
在现代冷链物流运输过程中,确保货物在运输过程中保持在适当的温度范围内是至关重要的。例如,水果、蔬菜、肉类、乳制品以及医疗用品等,这些产品对温度的敏感性要求运输过程中必须严格监控温度变化。RAMSUN介绍冷链温度记录仪蓝牙芯片应用案例…...
LeetCode - Google 校招100题 第7天 序列(数据结构贪心) (15题)
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/144744418 相关文章: LeetCode 合计最常见的 112 题: 校招100题 第1天 链表(List) (19题)校招100题 第2天 树(Tree) (21…...
深入理解Redis:从理论到实践的Java之旅
Redis,这个开源的内存数据结构存储系统,自2009年诞生以来,凭借其丰富的数据结构、快速的读写性能以及高度的可扩展性,迅速成为了分布式系统和高并发应用中的明星组件。本文将带你深入理解Redis,并通过Java语言的实践示…...
LabVIEW故障诊断中的无故障数据怎么办
在使用LabVIEW进行故障诊断时,可能会面临“无故障数据”的情况。这种情况下,缺乏明确的故障参考,使得系统难以通过传统对比法进行故障识别。本文将介绍应对无故障数据的关键策略,包括数据模拟、特征提取和基于机器学习的方法&…...
基于DIODES AP43781+PI3USB31531+PI3DPX1207C的USB-C PD Video 之全功能显示器连接端口方案
随着USB-C连接器和PD功能的出现,新一代USB-C PD PC显示器可以用作个人和专业PC工作环境的电源和数据集线器。 虽然USB-C PD显示器是唯一插入墙壁插座的交流电源输入设备,但它可以作为数据UFP(上游接口)连接到连接到TCD࿰…...
Android设备唯一标识终极指南:从IMEI到OAID的完整解决方案(附代码)
Android设备唯一标识终极指南:从IMEI到OAID的完整解决方案(附代码) 在移动应用开发中,设备唯一标识是许多业务场景的基础需求——从用户设备绑定、反作弊系统到精准数据分析都离不开它。但Android生态的碎片化让这个"简单&qu…...
告别版本混乱!手把手教你为Carla C++开发搭建纯净的Ubuntu编译环境
告别版本混乱!手把手教你为Carla C开发搭建纯净的Ubuntu编译环境 你是否经历过这样的场景:在Ubuntu上同时安装了Carla的二进制包和源码编译版本,结果Python客户端连接时频繁出现段错误、版本不匹配等诡异问题?这种"版本污染&…...
Retinaface+CurricularFace效果展示:多光照环境下考勤打卡成功率实测
RetinafaceCurricularFace效果展示:多光照环境下考勤打卡成功率实测 1. 测试背景与意义 企业考勤系统的人脸识别功能经常面临光照变化的挑战。早晨的侧光、中午的顶光、傍晚的逆光,这些自然光变化会导致传统人脸识别模型的准确率大幅波动。我们使用Ret…...
华为设备静态路由与BFD联动实战:从配置到故障切换全解析
1. 为什么需要BFD与静态路由联动? 静态路由就像一张纸质地图,一旦画好就不会自动更新。当某条道路(网络链路)突然塌方时,纸质地图不会自动标注"此路不通",司机(数据包)还是…...
我在OpenClaw 创建公司
我在OpenClaw 创建公司一、公司创立背景1.1 创立契机1.2 公司定位1.3 组织架构设计二、公司体系建设2.1 文档管理体系2.1.1 目录结构设计2.1.2 文档命名规范2.2 工作流程规范2.2.1 协作机制2.2.2 报告机制三、定时任务体系建立3.1 任务规划3.1.1 基础任务设置3.1.2 报告任务规划…...
NEURAL MASK 惊艳效果案例:城市景观照片的4K超分辨率重建
NEURAL MASK 惊艳效果案例:城市景观照片的4K超分辨率重建 每次翻看手机相册,是不是总有些照片让你觉得可惜?明明当时光线、构图都挺好,可放大一看,细节糊成一团,远处的招牌看不清,建筑的纹理也…...
抖音无水印视频下载终极指南:douyin-downloader完全使用教程
抖音无水印视频下载终极指南:douyin-downloader完全使用教程 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback…...
数学公式也能懂:gte-base-zh与MathType内容协同处理方案
数学公式也能懂:gte-base-zh与MathType内容协同处理方案 你有没有遇到过这样的烦恼?面对一份满是复杂数学公式和文字说明的学术论文或技术文档,想快速找到某个特定公式的推导过程,或者想检索所有提到“傅里叶变换”的地方&#x…...
Visual Studio Code远程开发:无缝调试云端Pixel Dimension Fissioner
Visual Studio Code远程开发:无缝调试云端Pixel Dimension Fissioner 1. 为什么需要远程开发 想象一下这样的场景:你的笔记本性能有限,但需要运行一个计算密集型的Pixel Dimension Fissioner项目。传统做法可能是把代码上传到服务器&#x…...
ANIMATEDIFF PRO场景应用:为社交媒体制作惊艳的动态封面视频
ANIMATEDIFF PRO场景应用:为社交媒体制作惊艳的动态封面视频 1. 社交媒体视觉革命:为什么需要动态封面 在信息爆炸的社交媒体时代,静态图片已经难以抓住用户快速滑动的注意力。数据显示,带有动态元素的封面内容点击率比静态图片…...
