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 ...