Module 如何将兄弟模块彼此隐藏在锈迹中?

Module 如何将兄弟模块彼此隐藏在锈迹中?,module,rust,private,class-visibility,Module,Rust,Private,Class Visibility,我有一个Rust模块早餐包含两个子模块鸡蛋和培根。早餐模块必须了解鸡蛋和培根,但这两个孩子不需要,因此不应该相互了解 这就是我的代码现在的样子。早餐做好了,但不幸的是,egg和bacon可以互相接近 mod早餐{ pub fn make_早餐()->String{ 格式!(“{}和{}”,鸡蛋::鸡蛋,培根::培根) } 模蛋{ pub const EGG:&'static str=“EGG”; } mod培根{ pub const BACON:&'static str=“BACON”; //哦

我有一个Rust模块
早餐
包含两个子模块
鸡蛋
培根
早餐
模块必须了解
鸡蛋
培根
,但这两个孩子不需要,因此不应该相互了解

这就是我的代码现在的样子。早餐做好了,但不幸的是,
egg
bacon
可以互相接近

mod早餐{
pub fn make_早餐()->String{
格式!(“{}和{}”,鸡蛋::鸡蛋,培根::培根)
}
模蛋{
pub const EGG:&'static str=“EGG”;
}
mod培根{
pub const BACON:&'static str=“BACON”;
//哦,不!培根知道鸡蛋的事!
//我希望这是一个编译错误。
使用超级::鸡蛋::鸡蛋;
}
}
我可以通过使用可见性修改器或重组模块来隐藏兄弟姐妹吗?还是我应该接受不必要的可见性

实际上,这些模块是在单独的文件中,但我将它们放在一个文件中,以提供更清晰的示例。

这是出于设计:

Rust的名称解析在名称空间的全局层次结构上运行。层次结构中的每个级别都可以看作是某个项目。这些物品属于上述物品之一,但也包括外部板条箱。声明或定义一个新模块可以被认为是在定义位置向层次结构中插入一个新树。[……]

默认情况下,Rust中的所有内容都是私有的,只有两个例外:pub Trait中的关联项默认为public;默认情况下,发布枚举中的枚举变量也是公共的。当一个项目被声明为pub时,它可以被认为是外部世界可以访问的

由于项目可以是公共的,也可以是私有的,Rust允许在两种情况下访问项目:

  • 如果某个项目是公共的,则可以从某个模块
    m
    外部访问该项目。如果可以从
    m
    访问该项目的所有父模块,则还可以通过重新导出来命名该项目。[……]
  • 如果项目是私有的,则当前模块及其子代可以访问该项目

有关这方面的更多信息,请参阅

的相关章节。似乎一个文件中的模块总是彼此可见。对于单独文件中的模块,您可以尝试使用
pub(super)
语法限制可见性。@Zefick感谢您的提示,我们将尝试一下!模块实际上是在单独的文件中,只需将它们放在一个文件中,以使问题更清楚。据我所知,文件结构不会影响Rust查看程序模块结构的方式。e、 g.
mod早餐{…}
mod早餐使用一个单独的文件将始终保持完全相同的功能。@Zefick它实际上与单独的文件无关——像Anders那样对模块进行建模,并将它们拆分为单独的文件是完全相同的事情。现在我明白了<代码> PUB(超级)