Rust 文件分层
模块可以分配到文件/目录的层次结构中。让我们将《可见性》一节中 的 例子 的代码拆分到多个文件中:
$ tree . . |-- my | |-- inaccessible.rs | |-- mod.rs | `-- nested.rs `-- split.rs
split.rs 的内容:
// 此声明将会查找名为 `my.rs` 或 `my/mod.rs` 的文件,并将该文件的内容放到 // 此作用域中一个名为 `my` 的模块里面。 mod my; fn function() { println!("called `function()`"); } fn main() { my::function(); function(); my::indirect_access(); my::nested::function(); }
my/mod.rs 的内容:
// 类似地,`mod inaccessible` 和 `mod nested` 将找到 `nested.rs` 和 // `inaccessible.rs` 文件,并在它们放到各自的模块中。 mod inaccessible; pub mod nested; pub fn function() { println!("called `my::function()`"); } fn private_function() { println!("called `my::private_function()`"); } pub fn indirect_access() { print!("called `my::indirect_access()`, that\n> "); private_function(); }
my/nested.rs 的内容:
pub fn function() { println!("called `my::nested::function()`"); } #[allow(dead_code)] fn private_function() { println!("called `my::nested::private_function()`"); }
my/inaccessible.rs 的内容:
#[allow(dead_code)] pub fn public_function() { println!("called `my::inaccessible::public_function()`"); }
我们看到代码仍然正常运行,就和前面的一样:
$ rustc split.rs && ./split called `my::function()` called `function()` called `my::indirect_access()`, that > called `my::private_function()` called `my::nested::function()`
crate(中文有 “包,包装箱” 之意)是 Rust 的编译单元。当调用 rustc some_file.rs时,some_file.rs 被当作 crate 文件。如果 some_file.rs 里面含有 mod声 ...