rust模組管理示例1

张疯牛發表於2024-04-29

1、建立如下rust工程

rust模組管理示例1

不用管其中程式碼的作用是什麼,只要知道有一個main.rs和四個模組s1、s2、s3、s4即可。

2、s1模組使用了Rust2015的模組格式,即:需要建立s1資料夾,在s1下建立功能檔案hello.rs及名為mod.rs的模組定義檔案。

s1/hello.rs

pub fn say_hello(){
    println!("hello from module s1");
}

s1/bye.rs

pub fn say_bye(){
    println!("good bye from module s1");
}

s1/mod.rs

//省略無關部分
。。。。。。

pub fn main1() {
    // 獲取單例例項
    let instance1 = Singleton::get_instance();
    let instance2 = Singleton::get_instance();
    // 修改單例資料
    {
        let mut instance = instance1.lock().unwrap();
        instance.data = String::from("s1:Modified singleton instance");
    }
    // 輸出單例資料
    {
        let instance = instance2.lock().unwrap();
        println!("{}", instance.data);
    }

    hello::say_hello();
}

mod hello;
mod bye;

注意mod語句可以出現在mod.rs檔案的任何位置,可以加pub以示公開,可以宣告多個mod,不使用mod語句宣告的模組不參與編譯。

3、s2模組使用了Rust2018的模組格式,即:s2資料夾下建立功能檔案hello.rs等,同時建立一個與s2資料夾同級的檔案s2.rs

s2/hello.rs

pub fn say_hello(){
    println!("hello from module s2");
}

s2.rs

mod hello;

pub fn main2() {
    hello::say_hello();
}

4、s3和s4使用了單檔案模組,比較簡單,不再贅述。

s3.rs

//省略無關程式碼
。。。

pub fn main3() {
    // 獲取單例例項
    let instance = INSTANCE.borrow();
    println!("{}", instance.data);
}

5、最後,在工程的main.rs或lib.rs等程式入口檔案,需要宣告s1、s2、s3、s4等頂級模組:

main.rs

mod s1;
mod s2;

fn main() {
    s1::main1();
    s2::main2();
    s3::main3();
    s4::main4();
}

mod s3;
mod s4;

注意mod語句的位置、順序都是無關緊要的。

6、總結:

mod是建立大工程的管理基礎,搞清楚其語法規則對於初學者很重要。另外,本文只討論了將檔案作為mod時的mod語句規則,沒有討論內嵌mod的語法,請自行查資料學習。本文也沒有討論use語句,對於rust而言,use更像是一個對模組路徑重新命名的“語法糖”,請參考其他資料。

本練習的原始檔附後供參考:

本次練習的源程式

相關文章