zoukankan      html  css  js  c++  java
  • 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 关键字设置别名

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

    学习是一条令人时而喜极若狂、时而郁郁寡欢的道路。
  • 相关阅读:
    06 is和==的区别 encode()编码 decode()解码
    05 dic的增删改查 字典的嵌套 考试题dic.get()的相关使用
    03 编码 int ,bool,str的常用操作 主要讲str
    01 基本数据类型 变量 if语句
    04 列表的增删改查 常用方法 元祖 range
    02 while循环 格式化输出 运算符
    多校2 Harmonious Army hdu6598 网络流
    P3159 [CQOI2012]交换棋子 网络流
    P2172 [国家集训队]部落战争 最大流
    P2402 奶牛隐藏 网络流
  • 原文地址:https://www.cnblogs.com/tim100/p/15630664.html
Copyright © 2011-2022 走看看