zoukankan      html  css  js  c++  java
  • Rust模块化

    Rust模块化

    模块化有助于代码的管理和层次逻辑的清晰

    Rust模块化有多种方式:

    1.嵌套模块

    嵌套模块就是直接在要使用模块的文件中声明模块

    mod food{//声明模块
       pub struct Cake;
       pub struct Smoothoe;
       pub struct Pizza;
    }
    use food::Cake;//使用模块中的内容
    fn main() {
        let eateable=Cake;
    }
    
    

    2.文件模块

    一个.rs文件就是一个和文件同名的模块,在使用的地方要声明模块

    file_module/
    ├── Cargo.toml
    └── src
    ├── food.rs
    └── main.rs

    food.rs:

       pub struct Cake;
       pub struct Smoothoe;
       pub struct Pizza;
    

    main.rs

    mod food;//声明模块
    use food::Cake;//使用模块内容
    fn main() {
        let eatable=Cake;
    }
    

    3.目录模块

    2015写法:

    dir_module_2015
    ├── Cargo.toml
    └── src
    ├── food
    │ ├── cake.rs
    │ ├── mod.rs
    │ ├── pizza.rs
    │ └── smoothoe.rs
    └── main.rs

    cake.rs:

    pub struct Cake;
    

    pizza.rs

    pub struct Pizza;
    

    smoothoe.rs

    pub struct Smoothoe;
    

    mod.rs

    pub mod cake;
    pub mod pizza;
    pub mod smoothoe;
    use self::cake::Cake;
    impl Cake {
        pub fn judge(){
            println!("cake is sweet");
        }
    }
    

    main.rs

    mod food;
    use food::cake::Cake;
    fn main() {
        Cake::judge();
    }
    
    2018写法:

    dir_module_2018
    ├── Cargo.toml
    └── src
    ├── food
    │ ├── cake.rs
    │ ├── pizza.rs
    │ └── smoothoe.rs
    ├── food.rs
    └── main.rs

    cake.rs:

    pub struct Cake;
    

    pizza.rs

    pub struct Pizza;
    

    smoothoe.rs

    pub struct Smoothoe;
    

    food.rs

    pub mod cake;
    pub mod pizza;
    pub mod smoothoe;
    use self::cake::Cake;
    impl Cake {
        pub fn judge(){
            println!("cake is sweet");
        }
    }
    

    main.rs

    mod food;
    use food::cake::Cake;
    fn main() {
        Cake::judge();
    }
    

    目前Rust兼容mod.rs写法和文件夹同目录下同名文件写法

    导入规则

    绝对导入

    create:绝对导入前缀,指向当前目的root模块(main.rs或lib.rs)。

    相对导入

    self:指向于当前模块的元素,用于任何想要引入自身模块所包含的内容时。(例如父模块重新导出子模块 pub use self::cake::Cake; )

    super:指向父模块,用于从父模块导入元素。(如果模块bar希望访问副模块foo中的元素Foo,那么可以用super::foo::Foo)

  • 相关阅读:
    164 Maximum Gap 最大间距
    162 Find Peak Element 寻找峰值
    160 Intersection of Two Linked Lists 相交链表
    155 Min Stack 最小栈
    154 Find Minimum in Rotated Sorted Array II
    153 Find Minimum in Rotated Sorted Array 旋转数组的最小值
    152 Maximum Product Subarray 乘积最大子序列
    151 Reverse Words in a String 翻转字符串里的单词
    bzoj3994: [SDOI2015]约数个数和
    bzoj 4590: [Shoi2015]自动刷题机
  • 原文地址:https://www.cnblogs.com/yanshaoshuai/p/14407130.html
Copyright © 2011-2022 走看看