【Rust】——package、crate、定义Module

简介: 【Rust】——package、crate、定义Module

🎯Rust代码组织

  • 代码组织主要包括:

       —哪些细节可以暴露,哪些细节是私有的。

       —作用域内哪些名称有效

       —...


  • 模块系统:

       包(Packages):Cargo 的一个功能,它允许你构建、测试和分享 crate。

       Crates :一个模块的树形结构,它形成了库或二进制项目。

       模块(Modules)和 use:允许你控制作用域和路径的私有性。

       路径(path):一个命名例如结构体、函数或模块等项的方式


🎯package和crate

crate是 Rust 在编译时最小的代码单位。


  • crate类型:

       —binary(二进制)


       —library(库)


  • Crate Root:


       —是源代码文件


       —Rust编译器从这里开始,组成你得Crate的根Moudule


  • 一个package:

       —一个包会包含一个 Cargo.toml 文件,阐述如何去构建这些 crate。


       —只能包含0-1个library crate


       —可以包含任意数量的binary crate


       —但必须至少包含一个crate(library或binary)


🎯Cargo的惯例


src/main.rs 就是一个与包同名的二进制 crate 的 crate 根。


src/lib.rs,包带有与其同名的库 crate,且 src/lib.rs 是 crate 根。


  • 一个包同时含有 src/main.rs 和 src/lib.rs,则它有两个 crate:

       —一个二进制的和一个库的,且名字都与包相同。


  • 一个package可以多个binary crate;

       —文件放在src/bin


       —每个文件是单独的binary crate


🎯Crate的作用

将相关功能组合到一个作用域内,便于在项目进行共享

       —防止冲突

例如rand crate,访问它的功能需要通过它的名字:rand


🎯定义module来控制作用域和私有性

Module:

  • 模块 让我们可以将一个 crate 中的代码进行分组
  • 提高可读性与重用性
  • 利用模块控制项的 私有性

建立module:

—mod关键字

—可嵌套

—在模块内,我们还可以定义其他的模块,定义的其他项,比如结构体、枚举、常量、特性、或者函数。

mod front_of_house {
    mod hosting {
        fn add_to_waitlist() {}
 
        fn seat_at_table() {}
    }
 
    mod serving {
        fn take_order() {}
 
        fn serve_order() {}
 
        fn take_payment() {}
    }
}

 src/main.rssrc/lib.rs 叫做 crate 根。之所以这样叫它们是因为这两个文件的内容都分别在 crate 模块结构的根组成了一个名为 crate 的模块,该结构被称为 模块树module tree)。

crate
 └── front_of_house
     ├── hosting
     │   ├── add_to_waitlist
     │   └── seat_at_table
     └── serving
         ├── take_order
         ├── serve_order
         └── take_payment
 
目录
相关文章
|
Rust 编译器 Shell
Rust学习笔记之包、Crate和模块
1. Rust中包和 crate 推荐阅读指数 ⭐️⭐️⭐️⭐️⭐️ 2. 模块控制作用域与私有性 推荐阅读指数 ⭐️⭐️⭐️⭐️ 3. 路径用于引用模块树中的项 推荐阅读指数 ⭐️⭐️⭐️⭐️ 4. use 将名称引入作用域 推荐阅读指数 ⭐️⭐️⭐️⭐️ 5. 将模块分割进不同文件 推荐阅读指数 ⭐️⭐️⭐️
108 0
Rust学习笔记之包、Crate和模块
|
5天前
|
Rust 安全 程序员
|
5天前
|
Rust 安全 程序员
Rust vs Go:解析两者的独特特性和适用场景
在讨论 Rust 与 Go 两种编程语言哪种更优秀时,我们将探讨它们在性能、简易性、安全性、功能、规模和并发处理等方面的比较。同时,我们看看它们有什么共同点和根本的差异。现在就来看看这个友好而公平的对比。
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(十三)(1)
Rust vs Go:常用语法对比(十三)(1)
63 0
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(七)(1)
Rust vs Go:常用语法对比(七)(1)
48 0
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(四)(1)
Rust vs Go:常用语法对比(四)(1)
122 0
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(十三)(2)
Rust vs Go:常用语法对比(十三)(2)
73 1
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(十二)(2)
Rust vs Go:常用语法对比(十二)(2)
59 0
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(十二)(1)
Rust vs Go:常用语法对比(十二)(1)
64 0
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(十一)(2)
Rust vs Go:常用语法对比(十一)(2)
55 0