360网站建设公司,长沙seo网站优化,wordpress使用数据库,天门市城市建设管理局网站喜欢的话别忘了点赞、收藏加关注哦#xff0c;对接下来的教程有兴趣的可以关注专栏。谢谢喵#xff01;(#xff65;ω#xff65;)
7.1.1. Rust的代码组织
代码组织主要包括#xff1a;
那些细节可以对外暴露#xff0c;而哪些细节是私有的在作用域内哪些名称有效… …喜欢的话别忘了点赞、收藏加关注哦对接下来的教程有兴趣的可以关注专栏。谢谢喵(ω)
7.1.1. Rust的代码组织
代码组织主要包括
那些细节可以对外暴露而哪些细节是私有的在作用域内哪些名称有效…
这些功能被统称为模块系统模块系统中包含顺序从大概念到小概念
Package(包):Cargo的特性让你构建、测试和共享crate。可以理解为项目Crate(单元包):一个模块树它可以产生一个library或可执行文件。Module(模块):它让你控制代码的组织、作用域和私有路径Path(路径):为struct、function或module等条目命名的方式
7.1.2. 包(Package)与单元包(Crate)
crate分为两种类型
binary(二进制)一个可以独立运行的可执行程序必须包含一个 main 函数作为程序的入口点。通常用于实现具体的应用程序或命令行工具。library(库)一个用于共享和重用的代码模块不能直接运行。没有 main 函数而是通过公开的函数或模块供其他代码调用。
crate root指的是源代码文件(也就是.rs文件)而且是入口文件比如main.rsRust编译器会从这里开始组成crate的根Module
一个Package包含
一个Cargo.toml它描述了如何构建这些Crates要么有一个要么就没有library crate可以有任意数量的binary crate但至少得有一个crate(不管是library还是binary)
7.1.3. Cargo的惯例
如果你打开本地Rust项目的Cargo.toml就比如说我的
[package]
name RustStudy
version 0.1.0
edition 2021 [dependencies]
rand 0.8.5你会发现没有提到入口文件这是因为Cargo默认把src/main.rs当作binary crate的crate rootcrate的名与Package相同也就是binary crate的名与包名相同都是RustStudy(toml文件第二行写了)。这是约定大于配置的思想。
假如说这个项目里也可以说是Package里在src目录下有lib.rs这么一个文件这就是说这个Package包含一个library crate而这个lib.rs就是library crate的crate root。而这个crate的名与package的名也是相同的都是RustStudy。
Cargo会把crate root文件交给rustc来构建library或者binary
刚刚提到过一个Package里可以有很多个binary crate这时可以把源代码文件也就是.rs文件放在src/bin这个目录下这下面的每个文件都是单独的binary crate(单独的程序)
7.1.4. Crate 的作用
crate的作用是将相关功能组合到一个作用域内便于在项目里间进行分享。同时也可以防止命名的冲突。比如生成随机数的这个rand crate访问它的功能就需要通过它的名字rand。
7.1.5. 定义Module来控制作用域和私有性
Module是在一个crate里将代码进行分组也就是分为若干个模块(Module)的功能它可以增加代码的可读性并且使功能易于复用。它可以控制条目(item)的私有性。控制它们是public对外暴露的还是private私有的。
建立module需要使用mod这个关键字在后面写这个module的名字在名字后边使用花括号。
其次module是可以嵌套的里面的就叫做子module在module里可以包含其他项struct、enum、常量、trait、函数等的定义。
还是看个例子吧在src目录下的lib.rs里写
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() {}}
}在这个例子中,hosting和serving就是front_of_the_house的子module,front_of_the_house就被称为父module,而在这两个子module下还定义了好几个函数。
main.rs和lib.rs叫做crate roots。这两个文件的内容就会隐式形成名为crate的模块位于整个模块树的根部图中的最顶层。下图就是刚刚那个lib.rs的模块树
crate└── front_of_house├── hosting│ ├── add_to_waitlist│ └── seat_at_table└── serving├── take_order├── serve_order└── take_payment