我see的功能'可见性可以在模块中声明为pub(self)
。这与没有pub
属性的私有函数有什么不同?如果它们没有区别,为什么存在这种语法呢?
答案 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
以获得非发布定义的效果。