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

【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. 拆分的优点

随着模块变大,该技术让程序员可以把模块的内容移动到其他文件中。

http://www.lryc.cn/news/512414.html

相关文章:

  • Python入门:8.Python中的函数
  • MySQL什么情况下会加间隙锁?
  • 【服务器开发及部署】code-server 显示git graph
  • Linux 终端查看 nvidia 显卡型号
  • 助你通过AI培训师中级考试的目录索引
  • 百度PaddleSpeech识别大音频文件报错
  • Lucene 漏洞历险记:修复损坏的索引异常
  • RabbitMQ基础篇之快速入门
  • 如何自定义 Kubernetes KubeSphere 默认 Logo:详细实现方案
  • 标准库以及HAL库——按键控制LED灯代码
  • Echarts+vue电商平台数据可视化——webSocket改造项目
  • Flink中并行度和slot的关系——任务和任务槽
  • 基于西湖大学强化学习课程的笔记
  • 瀚高数据库 问题: ERROR: operator does not exist: character varying = integer
  • 冷链温度记录仪蓝牙应用案例
  • LeetCode - Google 校招100题 第7天 序列(数据结构贪心) (15题)
  • 深入理解Redis:从理论到实践的Java之旅
  • LabVIEW故障诊断中的无故障数据怎么办
  • 基于DIODES AP43781+PI3USB31531+PI3DPX1207C的USB-C PD Video 之全功能显示器连接端口方案
  • MySQL配置my.ini文件
  • JVM常见排查问题的命令及可视化工具
  • 【python】matplotlib(moon cake)
  • Pytorch使用手册-空间变换网络指南(专题十五)
  • Vue 中el-table-column 进行循环,页面没渲染成功
  • 基于单片机的温湿度采集系统(论文+源码)
  • 使用envoyfilter添加请求头
  • kafka开机自启失败问题处理
  • 优化站群SEO:使用苹果CMS泛目录插件实现泛目录页面刷新不变
  • git clone 和 conda 换源
  • 人工智能及深度学习的一些题目(二)