I see表示函数的可见性可以在模块内声明为pub(self)
.这与没有pub
属性的私有函数有何不同?如果它们没有区别,为什么会存在这种语法?
I see表示函数的可见性可以在模块内声明为pub(self)
.这与没有pub
属性的私有函数有何不同?如果它们没有区别,为什么会存在这种语法?
pub(restricted)
语法是在RFC 1422年引入的.它引入了两种指定可见性的新方法:
pub(crate)
:使物品对当前的整个 crate 可见,但不超过此范围.pub(in path::to::module)
:使该项对路径指定的模块树可见.pub(self)
是pub(in self)
的语法糖,它属于第二类:self
只是一条路径,比如super
、::foo
、bar::baz
等等.这意味着,是的,pub(self)
使该项对当前模块树可见.
因此,101 is equivalent to omitting the 101 declaration.这甚至被称为in the RFC:
如上所述,这个定义意味着
pub(self) item
等同于一个人只写了item
.
RFC还提到了支持这一点的原因:
支持这种通用性的主要原因(在其他方面只是"冗余语法")是宏:可以编写扩展到
pub($arg)
项的宏,宏客户机可以将self
作为$arg
传递,以获得非发布定义的效果.