乐趣区

关于rust:与-Rust-勾心斗角-小工程

代码写了二百多行了,尽管不多,然而通通放在一份源文件里,无论是浏览还是批改,曾经让我感觉眼累。当初我要尝试应用 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。

退出移动版