代码写了二百多行了,尽管不多,然而通通放在一份源文件里,无论是浏览还是批改,曾经让我感觉眼累。当初我要尝试应用 Rust 语言的模块性能为它们分家。
家喻户晓,Rust 的模块性能通常是配合它的搭档——我的项目构建工具 Cargo 来用,但我不打算如此。因为我不喜爱做一点小事件,就要大动干戈。这不是 Cargo 的问题,这是我的问题。
rskynet 我的项目
新建一个目录 rskynet,在该目录新建一份文件 rskynet.rs,其内容为
mod geometry;
use geometry::{sphere, mesh};
fn main() {sphere::hi();
mesh::hi();}
我的项目的名字就叫 rskynet。在 rskynet.rs 文件里,mod geometry
语句可「载入」geometry 模块,use
语句可将 geometry 模块的子模块 sphere 和 mesh 作为命名空间。在 main
函数里,别离调用了 sphere 和 mesh 模块里的 hi
函数。
geometry 模块
在 rskynet 目录内,建设 geometry 目录,而后在该目录内新建一份文件 mod.rs,其内容如下:
pub mod sphere {// 内容临时为空}
pub mod mesh {// 内容临时为空}
当初,rskynet 目录的布局概览如下
rskynet
├── geometry
│ └── mod.rs
└── rskynet.rs
在 rskynet 目录内编译 rskynet.rs 并运行所得程序:
$ rustc rskynet.rs
$ ./rskynet
后果会输入
我是球体!我是网格!
rustc 在编译 rskynet.rs 时,可能找到 geometry/mod.rs 文件,并且认为它是 geometry 模块,并且可能认出 geometry 模块还有两个子模块 sphere 和 mesh。
当初,能够得出以下论断:
- 模块能够是「目录 /mod.rs」的模式;
- 在一个模块里,应用
pub mod 模块名 {...}
的语法能够结构该模块的子模块。
持续宰割
是否将 sphere 和 mesh 模块的代码从 geometry/mod.rs 里抽出来,放在独自的文件里呢?试试看。
在 geometry 目录新建一份文件,名为 sphere.rs,其内容为
pub fn hi() {println!("我是球体!");
}
再在 geometry 目录新建一份文件,名为 mesh.rs,其内容为
pub fn hi() {println!("我是网格!");
}
而后将 geometry/mod.rs 内容批改为
pub mod sphere;
pub mod mesh;
最初从新编译 rskynet.rs 并运行所得程序,后果与上次雷同。据此,可得论断:一份 .rs 文件是一个模块,若它被同目录内的 mod.rs 文件 pub mod
,则它会成为 mod.rs 对应模块的子模块。
拜访父模块
假使将 geometry/mod.rs 内容批改为
pub fn hi() {println!(">>>");
}
pub mod sphere;
pub mod mesh;
在 sphere 和 mesh 模块里该如何调用它们父模块里的这个 hi
函数呢?
答案是,用 super
指代父模块。例如,将 sphere.rs 内容批改为
pub fn hi() {super::hi();
println!("我是球体!");
}
在 main 函数里调用 sphere::hi
函数时,可输入
>>>
我是球体!
真正的 rskynet 我的项目
见 https://gitee.com/garfileo/rskynet
小结
谁晓得我能保持多久不必 Cargo。