module - 如何在一个模块中拥有多个文件?

标签 module rust

我不明白为什么每个模块只有一个文件。

// main.rs

mod dog; // Find dog in dog.rs or dog/mod.rs
fn main() {
    dog::sonic_bark();
}

dog 变大并具有很多功能时,将它们全部放在一个文件中并不好。

如何在不使用的情况下将它们分开

dog::leg::walk();
dog::head::nose::smell();
dog::tail::iron_tail();
dog::mouth::sonic_bark();

我只想使用 dog::sonic_bark();

最佳答案

你不能。

您可以拥有比文件更多的模块(典型示例是文件中嵌套的 mod 测试),但反过来不行。


但是,这并不重要,因为您可以使用封装+重新导出。

使用 mod xxx; 声明子模块时,默认情况下 xxxprivate:当前模块的用户不会知道它取决于 xxx

将此与选择重新导出符号相结合:

pub use self::leg::walk;
pub use self::head::nose::smell;
pub use self::tail::iron_tail;
pub use self::mouth::sonic_bark;

你可以直接调用它们:dog::walk(), dog::smell(), ...

因此,私有(private)导入和公共(public)再导出可帮助您拥有一个隐藏的内部层次结构,同时公开一个平面公共(public)界面。


完整示例:

mod dog {
    pub use self::head::nose::smell;
    pub use self::leg::walk;
    pub use self::mouth::sonic_bark;
    pub use self::tail::iron_tail;

    mod leg {
        pub fn walk() {}
    }

    mod head {
        pub mod nose {
            pub fn smell() {}
        }
    }

    mod tail {
        pub fn iron_tail() {}
    }

    mod mouth {
        pub fn sonic_bark() {}
    }
}

fn main() {
    dog::sonic_bark();
}

关于module - 如何在一个模块中拥有多个文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42220379/

相关文章:

rust - 为什么 &i32 有时实现 Unpin,有时不实现?

rust - 如何在 Rust 中将字符串中的所有字符大写?

rust - 如何在下载过程中解压缩和解压 tar.gz 存档?

memory-management - 什么是Dyon的内存模型?

haskell - 合格进口前奏的替代品是什么

angular - 使用 SystemJS-builder 捆绑 Angular 2 提前编译器文件

javascript - 导出并要求 Express 应用程序问题

module - 如何覆盖 PrestaShop 1.7.7 模块类?

c - Linux 中相互依赖的树外内核可加载模块

rust - 使用 Real-Time For the Mass 时未定义对 main 的引用