模块可以理解为包内的具体功能,如 : 会员模块、订单模块等。
从crate根开始:编译crate时,编译器首先在crate根文件(通常是src/lib.rs表示库crate,src/main.rs表示二进制crate)中查找要编译的代码。
声明模块:在crate根文件中,可以声明新模块,main.rs :
mod user;
fn main() {
crate::user::test();
}
编译器会在 libs 文件夹内寻找 user.ts 或 user 文件夹,以寻找到对应的模块。
文件形式 :
在 libs 下创建 user.rs
pub fn test() {
println!("user");
}
文件夹形式 :
在 libs 下创建 user 文件夹, 并创建默认的 mod.rs : /libs/user/mod.rs
pub fn test() {
println!("user");
}
说明 :
文件夹形式时,编译器会自动寻找 mod.rs 作为模块的定义文件。
默认情况下,模块内的代码与其父模块是私有的。要使模块公开,在声明之前使用pub。
在一个范围内,use关键字创建项目的快捷方式,以减少长路径的重复。main.rs 示例 :
mod user;
use crate::user::test;
fn main() {
test();
}
我们可以在某个模块内继续创建子模块,语法 :
pub mod 模块名称
示例 :
lib/user/mod.rs
# 此处声明子模块 login 编译器会
在文件夹内寻找 login.rs 或 login 文件夹
pub mod login;
pub fn test() {
println!("user");
}
lib/user/login.rs
pub fn login(){
println!("login");
}
pub fn logout(){
println!("logout");
}
main.rs 调用模块
mod user;
use crate::user::login;
fn main() {
login::login();
login::logout();
}