modules 模块

模块

模块可以理解为包内的具体功能,如 : 会员模块、订单模块等。

目录关系

从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关键字

在一个范围内,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();
}