`pub(self)`的可见性与没有`pub`属性有什么不同?

时间:2018-06-18 08:48:13

标签: rust visibility

see的功能'可见性可以在模块中声明为pub(self)。这与没有pub属性的私有函数有什么不同?如果它们没有区别,为什么存在这种语法呢?

1 个答案:

答案 0 :(得分:9)

RFC 1422中引入了pub(restricted)语法。它引入了两种指定可见性的新方法:

  • pub(crate):使项目对整个当前包装箱可见,但不会超出。
  • pub(in path::to::module):使项目对路径指定的模块树可见。

pub(self)pub(in self)的语法糖,属于第二类:self只是super::foo,{{1}这样的路径}} 等等。这意味着,是的,bar::baz使项目对当前模块树可见。

因此, pub(self)相当于省略了pub(self)声明。这甚至是in the RFC

  

如上所述,该定义意味着pub(self)与仅编写pub(self) item的人相同。

RFC还提到了为什么支持这一点:

  

支持这种普遍性的主要原因(否则只是"冗余语法")是宏:可以编写一个扩展为item项的宏,并且宏客户端可以传递pub($arg)作为self以获得非发布定义的效果。