【发布时间】:2019-12-13 20:23:35
【问题描述】:
我有一个 Rust 模块 breakfast 包含两个子模块 egg 和 bacon。 breakfast 模块必须知道egg 和bacon,但是这两个孩子不需要,因此不应该知道彼此。
这就是我的代码现在的样子。早餐做好了,可惜egg和bacon可以互相访问。
mod breakfast {
pub fn make_breakfast() -> String {
format!("{} and {}", egg::EGG, bacon::BACON)
}
mod egg {
pub const EGG: &'static str = "egg";
}
mod bacon {
pub const BACON: &'static str = "bacon";
// Oh no! The bacon knows about the egg!
// I want this to be a compile error.
use super::egg::EGG;
}
}
我可以通过使用可见性修饰符或重组模块以某种方式隐藏兄弟姐妹吗?还是我应该接受不需要的可见性?
实际上,这些模块位于单独的文件中,但我在这里将它们放在一个文件中以使示例更清晰。
【问题讨论】:
-
似乎一个文件中的模块总是互相看到。对于单独文件中的模块,您可以尝试使用
pub (super)语法限制可见性。 -
@Zefick 感谢您的提示,将尝试一下!这些模块实际上是在单独的文件中,只需将它们放在一个文件中以使问题更清晰。
-
据我所知,文件结构不会影响 Rust 看待程序模块结构的方式。例如
mod breakfast { ... }和mod breakfast;具有单独的文件将始终功能完全相同。 -
@Zefick 实际上与单独的文件无关——像 Anders 那样对模块进行建模,并将它们分成单独的文件是完全相同的事情。
-
现在我明白了。
pub(super)使模块在超级模块及其所有子模块中可见。
标签: module rust private class-visibility