• 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 关键字设置别名

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

    学习是一条令人时而喜极若狂、时而郁郁寡欢的道路。
  • 相关阅读:
    独木舟上的旅行
    会场安排问题
    喷水装置(二)
    喷水装置(一)
    款待奶牛
    整理书本
    贪心算法基本思想和典型例题(转)
    贪心算法
    太乱了,不要了
    Runtime Error:Floating point exception 不知道拿错了
  • 原文地址:https://www.cnblogs.com/tim100/p/15630664.html
Copyright © 2020-2023  润新知