文件分层

模块可以映射到文件/目录层次结构。让我们将可见性示例拆分成多个文件:

$ tree . . ├── my │   ├── inaccessible.rs │   └── nested.rs ├── my.rs └── split.rs

split.rs 文件中:

// 这个声明会查找名为 `my.rs` 的文件,并将其内容 // 插入到当前作用域下名为 `my` 的模块中 mod my; fn function() { println!("调用了 `function()`"); } fn main() { my::function(); function(); my::indirect_access(); my::nested::function(); }

my.rs 文件中:

// 同样,`mod inaccessible` 和 `mod nested` 会分别定位到 // `nested.rs` 和 `inaccessible.rs` 文件, // 并将它们的内容插入到这里对应的模块中 mod inaccessible; pub mod nested; pub fn function() { println!("调用了 `my::function()`"); } fn private_function() { println!("调用了 `my::private_function()`"); } pub fn indirect_access() { print!("调用了 `my::indirect_access()`,它\n> "); private_function(); }

my/nested.rs 文件中:

pub fn function() { println!("调用了 `my::nested::function()`"); } #[allow(dead_code)] fn private_function() { println!("调用了 `my::nested::private_function()`"); }

my/inaccessible.rs 文件中:

#[allow(dead_code)] pub fn public_function() { println!("调用了 `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()`