文件层级

模块可以映射到文件/目录层级结构。 让我们分解可见性示例到文件中

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

split.rs

// This declaration will look for a file named `my.rs` and will // insert its contents inside a module named `my` under this scope mod my; fn function() { println!("called `function()`"); } fn main() { my::function(); function(); my::indirect_access(); my::nested::function(); }

my.rs

// Similarly `mod inaccessible` and `mod nested` will locate the `nested.rs` // and `inaccessible.rs` files and insert them here under their respective // modules 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()`