## Keyboard shortcuts

Press `←` or `→` to navigate between chapters

Press `S` or `/` to search in the book

Press `?` to show this help

Press `Esc` to hide this help

# 文件分层

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

    $ 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()`