前言
道尊:没有办法,你的法力已经消失,我的法力所剩无几,除非咱们重新修行,在这个世界里取得更多法力之后,或许有办法下降。——《拔魔》
\;\\\;\\\;
目录
- 前言
- 跨文件mod
- 多文件mod
跨文件mod
//my_mod.rs
pub mod mod_1{//默认私有fn say1(){println!("[say1]private function");}pub fn say2(){println!("[say2]public function");//调用子模块的函数mod_2::dog();}pub fn say3(){println!("[say3]public function");say2();//调用子模块的函数mod_2::run();}//模块的嵌套pub mod mod_2{fn say1(){println!("[mod_2][say1]private function");//不知道会不会重写}pub fn say2(){println!("[mod_2][say2]public function");//不知道会不会重写} //此函数只在当前mod中可见pub(self) fn interior_f(){println!("[mod_2][interior_f]only used in this mod");}//只在my_mod::mod_1中可见pub(in crate::my_mod::mod_1) fn dog(){println!("[mod_2][dog]do it!");interior_f();}//此函数只在上一层mod中可见pub(super) fn run(){println!("[mod_2][run]run!");}//再嵌套一层看看效果pub mod mod_3{pub fn say1(){println!("[mod_3][say1]marvelous!");}pub fn say2(){println!("[mod_3]say2");say1(); //本mod_3的say1//say2(); //本mod_3的say2,递归报错//interior_f(); //只在mod_2中,不能拿到下面来//dog(); //不能拿到下面来//run(); //只在mod_1中,不能拿到下面来}}}
}
//function.rs
mod my_mod;
pub use my_mod::*;fn main() {//mod_1::say1(); //私有函数调用不了mod_1::say2();mod_1::say3();//mod_1::mod_2::say1(); //私有函数调用不了mod_1::mod_2::say2();//mod_1::mod_2::interior_f(); //私有函数调用不了//mod_1::mod_2::some(); //私有函数调用不了//mod_1::mod_2::run(); //私有函数调用不了mod_1::mod_2::mod_3::say1();mod_1::mod_2::mod_3::say2();
}
\;\\\;
想办法在mod_3中调用mod_1和mod_2
...pub mod mod_3{pub fn say1(){println!("[mod_3][say1]marvelous!");}pub fn say2(){println!("[mod_3]say2");say1(); //本mod_3的say1//say2(); //本mod_3的say2,递归报错//子模块调用父模块use crate::mod_1::mod_2;mod_2::interior_f(); mod_2::dog(); use crate::mod_1;mod_1::say3(); //只在mod_1中,不能拿到下面来}}...
\;\\\;\\\;
多文件mod
文件夹的名字就是mod的名字,里面必须有一个mod.rs,和python里的__init__.py一样。
//student.rs
pub fn run_2(){println!("i am a student");
}
//teacher.rs
pub fn run_3(){println!("i am a teacher");
}
//staff.rs
pub fn run_1(){println!("i am a staff");
}
interface文件夹中的mod
//mod.rs
pub mod staff;
pub mod student;
pub mod teacher;
\;\\\;
调用模块
//run.rs
mod interface;
use interface::staff;
use interface::student;
use interface::teacher;fn main(){staff::run_1();student::run_2();teacher::run_3();
}