rust中的mod(模块)在项目中使用是必不可少的,但有很多种使用方式,有些方式比较推荐,我们来看看这些使用方式.

方式一: 当前类中定义并实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
mod x {
    pub(crate) fn x(){
        println!("x");
    }
    pub mod y{
        pub fn y(){
            println!("y");
        }  
        pub fn yy(){
            //可以使用self(可省)表示当前模块
            self::y();
            //可以使用super表示上层模块
            super::x();
        }   
    }
}
fn main() {
    x::x();
    x::y::y();
    x::y::yy();
}

方式二:同级目录中存放mod模块文件,如bar.rs

1
2
3
4
5
6
7
8
9
// bar.rs
pub fn bar() {
    println!("bar");
}
// mian.rs
mod bar;
fn main() {
    bar::bar();
}

方式三:带有文件夹的mod,需要在文件夹中创建mod.rs.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// 目录结构:
// ┌─main.rs
// └─serviecs
//    ├─user.rs
//    └─mod.rs
// user.rs
pub fn hello() {
    println!("hello : Hello world!");
}
// mod.rs
pub mod user;
// main.rs
mod services;
fn main() {
    services::user::get();
}

以下两种方式为不含有mod.rs的方式.
方式四:创建与文件夹同名的模块定义文件,也就是将mod.rs改名后提到外层. (如果实在不想建mod.js,推荐这个方式,对于中小项目而言,这样更一目了然)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
// 目录结构:
// ┌─main.rs
// ├─services
// │  └─user.rs
// └─services.rs
// user.rs
pub fn get(){
    println!("get user");
}
// services.rs
pub mod user;
// main.rs
mod services;
fn main() {
    services::user::get();
}

方式五:在使用时声明带有文件夹的模块,不推荐,显得臃肿,也不便于维护

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
// 目录结构:
// ┌─main.rs
// └─services
//    └─user.rs
// user.rs
pub fn get(){
    println!("get user");
}
// main.rs
mod services {
    pub mod user;
}
fn main() {
    services::user::get();
}