rust模块管理示例1

1、创建如下rust工程

不用管其中代码的作用是什么,只要知道有一个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更像是一个对模块路径重命名的“语法糖”,请参考其他资料。

本练习的源文件附后供参考:

本次练习的源程序

posted @ 2024-04-29 12:31  张疯牛  阅读(24)  评论(0编辑  收藏  举报
石家庄坦图计算机科技有限公司 石家庄市丰收路220号泽润大厦17层