• 【Rust】快速教程——模块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中,不能拿到下面来
                }
            }
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    //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();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    在这里插入图片描述

             \;\\\;\\\;

    多文件mod

    文件夹的名字就是mod的名字,里面必须有一个mod.rs,和python里的__init__.py一样。文件夹外需要一个mod.rs,来声明这个文件夹是模块。

    在这里插入图片描述

    //student.rs
    pub fn run_2(){
        println!("i am a student");
    }
    
    • 1
    • 2
    • 3
    • 4
    //teacher.rs
    pub fn run_3(){
        println!("i am a teacher");
    }
    
    • 1
    • 2
    • 3
    • 4
    //staff.rs
    pub fn run_1(){
        println!("i am a staff");
    }
    
    • 1
    • 2
    • 3
    • 4

    interface文件夹中的mod

    //mod.rs
    pub mod staff;
    pub mod student;
    pub mod teacher;
    
    • 1
    • 2
    • 3
    • 4

    和interface文件夹并行的mod

    //mod.rs
    pub mod interface;
    
    • 1
    • 2

          \;\\\;
    调用模块

    //run.rs
    mod interface;
    use interface::staff;
    use interface::student;
    use interface::teacher;
    
    fn main(){
        staff::run_1();
        student::run_2();
        teacher::run_3();
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    在这里插入图片描述

  • 相关阅读:
    JAVA-线程
    jinkens编译不通过排查
    使用Docker+PHP搭建苹果Maccms的影视站详细教程
    目标检测YOLO实战应用案例100讲-雾天场景下低能见度图像 目标检测(中)
    C4BUILDER—用于构建C4模型图的Web项目
    全志ARM926 Melis2.0系统的开发指引④
    Typora设置标题自动标号
    Flutter实用工具Indexer列表索引和Search搜索帮助。
    【必知必会的MySQL知识】②使用MySQL
    软件质量保护与测试(第2版)学习总结第十一章 白盒测试
  • 原文地址:https://blog.csdn.net/weixin_41374099/article/details/134469680