文件分层

模块可以分配到文件/目录的层次结构中。让我们将《可见性》一节中 的例子的代码拆分到多个文件中:

  1. $ tree .
  2. .
  3. |-- my
  4. | |-- inaccessible.rs
  5. | |-- mod.rs
  6. | `-- nested.rs
  7. `-- split.rs

split.rs 的内容:

  1. // 此声明将会查找名为 `my.rs` 或 `my/mod.rs` 的文件,并将该文件的内容放到
  2. // 此作用域中一个名为 `my` 的模块里面。
  3. mod my;
  4. fn function() {
  5. println!("called `function()`");
  6. }
  7. fn main() {
  8. my::function();
  9. function();
  10. my::indirect_access();
  11. my::nested::function();
  12. }

my/mod.rs 的内容:

  1. // 类似地,`mod inaccessible` 和 `mod nested` 将找到 `nested.rs` 和
  2. // `inaccessible.rs` 文件,并在它们放到各自的模块中。
  3. mod inaccessible;
  4. pub mod nested;
  5. pub fn function() {
  6. println!("called `my::function()`");
  7. }
  8. fn private_function() {
  9. println!("called `my::private_function()`");
  10. }
  11. pub fn indirect_access() {
  12. print!("called `my::indirect_access()`, that\n> ");
  13. private_function();
  14. }

my/nested.rs 的内容:

  1. pub fn function() {
  2. println!("called `my::nested::function()`");
  3. }
  4. #[allow(dead_code)]
  5. fn private_function() {
  6. println!("called `my::nested::private_function()`");
  7. }

my/inaccessible.rs 的内容:

  1. #[allow(dead_code)]
  2. pub fn public_function() {
  3. println!("called `my::inaccessible::public_function()`");
  4. }

我们看到代码仍然正常运行,就和前面的一样:

  1. $ rustc split.rs && ./split
  2. called `my::function()`
  3. called `function()`
  4. called `my::indirect_access()`, that
  5. > called `my::private_function()`
  6. called `my::nested::function()`