• 文件分层

    文件分层

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

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