我们之前说的rand就是一个crate
一个Package可以有多个binary crate,但只能有0/1个library crate。
Module:
在一个crate内,将代码进行分组
控制项目的私有性:public、private
建立module:
-mod 关键字
-可嵌套
-可包含其他项(struct、enum、常量、函数等)的定义
mod front_of_house{//module
mod hosting{//module下的子module
fn add(){}
fn seat(){}
}
mod serving{
fn order(){}
fn serve(){}
fn payment(){}
}
}
mod front_of_house{//module
mod hosting{//module下的子module
fn add(){}
}
}
pub fn eat_at_rest(){//前面用pub修饰,该函数是公共函数,可以共享
crate::front_of_house::hosting::add();//绝对路径调用函数
front_of_house::hosting::add();//因为eat_at_rest()函数和front_of_house模块在同一级所以可以使用相对路径
}
一般使用绝对路径保证两部分同时移动。
Rust中所有的条目(函数、方法、模块、常量等)默认是私有的 ,使用pub关键字可以使条目变为公共的。
-super关键字:访问父级模块路径中的内容
struct结构体前加pub,使得该结构体变成公共的,但是结构体中的变量并不是公共的,若想使其变量也是公共属性,需要在变量前也加上pub
在enum枚举前加pub修饰,不仅该枚举类型是公共属性,而且其中的变体也都是公共的
用来导入使用条目的路径
必须是公共(pub)的才能被导入
可以配合as使用,给引入的条目取一个别名,类似python中import...as...
use std::cmp::Ordering as abc;
pub use:可以使所导入的条目公共化,被外部所使用
使用外部包:
1.Cargo.toml添加依赖的包,比如:rand
2.use将特定条目引入作用域