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写法和文件夹同目录下同名文件写法

 

4. 导入规则

1) 绝对导入

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

2) 相对导入

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

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

PyO3功能很强大,是 python 和 rust 之间交互桥梁。今天主要试验 python 端调用 rust 端编译的代码库。 说明:本文环境中在windos平台和WSL下 unbuntu1 ...