前言
道尊:没有办法,你的法力已经消失,我的法力所剩无几,除非咱们重新修行,在这个世界里取得更多法力之后,或许有办法下降。——《拔魔》
\;\\\;\\\;
目录
- 前言
- 跨文件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
文件夹的名字就是mod的名字,里面必须有一个mod.rs,和python里的__init__.py一样。文件夹外需要一个mod.rs,来声明这个文件夹是模块。
//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;
和interface文件夹并行的mod
//mod.rs
pub mod interface;
\;\\\;
调用模块
//run.rs
mod interface;
use interface::staff;
use interface::student;
use interface::teacher;
fn main(){
staff::run_1();
student::run_2();
teacher::run_3();
}