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更像是一个对模块路径重命名的“语法糖”,请参考其他资料。
本练习的源文件附后供参考: