Rust学习——使用包、crate和模块管理不断增长的项目

一、包和Crate

  • 一个包至多只能包含一个库crate
  • 包中可以包含任意多个二进制crate
  • 包中至少包含一个crate,不区分类型
    src/main.rs 就是一个与包同名的二进制 crate 的 crate 根。

src/bin -> 二进制crate
src/lib.rs -> 库crate
src/main.rc -> 二进制crate

二、定义模块,以控制作用域与私有性
使用 mod 关键字定义模块。

沿用家庭关系的比喻,如果一个模块 A 被包含在模块 B 中,我们将模块 A 称为模块 B 的 子(child),模块 B 则是模块 A 的 父(parent)。

三、路径,用于引用模块树中的项
Rust 私有性边界:不允许外部代码了解、调用和依赖被封装的实现细节。

若希望创建一个私有函数或构造体,可以使用模块 mod。

Rust中默认所有项:函数、方法、结构体、枚举、模块和常量,都是私有的。

可以使用crate开头实现绝对路径使用模块。
也可以使用super开头来构建从父模块开始的相对路径。(类似于 ../ )方便在内嵌较深的函数下引用其他模块的函数。

四、use关键字,将名称引入作用域
使用use关键字将模块下函数显示声明,后续即可直接使用该函数,无需加上一长串的前缀。

应当创建惯用的use路径,而不是具体的某个函数,这样很不方便使用。

当使用use引入:结构体、枚举,习惯性指定他们完整的路径。

如何使用use将两个同名类型引入同一作用域?
在这个类型的路径后面,使用as关键字指定一个新的本地名称或者别名。

可以使用 pub + use 重导出名称。

标准库(std)对于你的包来说也是外部crate。

可以使用嵌套路径消除大量路径相同部分。

若想引入所有项,则可以在指定路径后使用*.(问题是会使得当前包下难以推导作用域中有什么名称以及何处定义)

五、模块分割

  1. 以分割模块命名文件
  2. 通过mod 关键字引入模块
  3. 使用模块,可以使用use 关键字设置别名

文件路径即模块路径,且命名一致。

上一篇:ROS多机通信时间同步 解决the NTP socket is in use, exiting 的问题


下一篇:nuxt项目中使用vant