rust编程指南——包管理
Package、Crate和Module
模块系统:
-
Package(包):Cargo的特性,让你构建、测试、共享 crate Crate(单元包):一个模块树,它可产生一个 library或可执行文件 Modυle(模块)、Use:让你控制代码的组织、作用域、私有路径 Path(路径):为 struct、 function或 module等项命名的方式
Package和Crate
Crate的类型:
-
binary library
Crate root
-
是源代码文件 Rust编译器从这里开始,组成你的 Crate的根 Module
一个 Package
-
包含1个 Cargo.toml,它描述了如何构建这些 Crates 只能包含0-1个 library crate 可以包含任意数量的 binary crate 但必须至少包含一个 crate( library或 binary)
惯例
src/main. rs:
-
binary crate 的 crate root crate名与 package名相同
src/lib. rs:
-
package包含一个 library crate library crate 的 crate root crate名与 package名相同
Cargo把 crate root文件交给 rust来构建 library或 binary
一个 Package可以同时包含src/main.rs和src/lib.rs
-
一个 binary crate,一个 library crate 名称与 package名相同
一个 Package可以有多个 binary crate:
-
文件放在src/bin 每个文件是单独的 binary crate
Module
Module的作用:
-
在一个 crate内,将代码进行分组 增加可读性,易于复用 控制项目(iem)的私有性。 public、 private
建立 module:
-
mod关键字 可嵌套 可包含其它项( struct、enum、常量、trai、函数等)的定义
//src/lib.rs mod front_of_house { mod hosting { fn add_to_waitlist(){} fn sear_at_table(){} } mod serving{ fn take_order(){} fn serve_order(){} fn take_payment(){} } }
src/main.rs和src/lib.rs的内容形成了crate模块(隐式模块),位于整个模块树的根部
Path
为了在Rust的模块中找到某个条目,需要使用路径。
路径的两种形式:
-
绝对路径:从 crate root开始,使用 crate名或字面值 crate 相对路径:从当前模块开始,使用se!f, sUper或当前模块的标识符
mod front_of_house { pub mod hosting { pub fn add_to_waitlist(){} } } pub fn eat_at_restaurant(){ //绝对 crate::front_of_house::hosting::add_to_waitlist(); //相对 front_of_house::hosting::add_to_waitlist(); }
私有边界
模块不仅可以组织代码,还可以定义私有边界
如果想把函数或 struct等设为私有,可以将它放到某个模块中
Rust中所有的条目(函数,方法, struct,enum,模块,常量)默认是私有的。
父级模块无法访问子模块中的私有条目
子模块可以使用所有祖先模块的条目
super关键字,访问上级
公共struct中的字段还是私有的,公共enum中的段都是公共的
use关键字
导入模块
as关键字
use std::io::Result as IoResult;
pub use使对外暴露更灵活
使用外部package
Cargo. tom添加依赖的包( package)
-
从https://crates.io/下载 Use将特定条目引入作用域
use的使用,嵌套,通配符*
将模块拆分为文件
模块定义时,如果模块名后边是“;”,而不是代码块,rust会从与模块同名的文件中加载内容
//src/lib.rs mod front_of_house; pub use crate::front_of_house::hosting; ///src/front_of_house.rs pub mod hosting; ///src/front_of_house/hosting.rs pub fn add_to_waitlist(){}
下一篇:
C语言 画心形 程序员的简单浪漫