代码之家  ›  专栏  ›  技术社区  ›  palotasb

“pub(self)”可见性与“no”pub“属性有何不同?

  •  8
  • palotasb  · 技术社区  · 8 年前

    see 函数的可见性可以声明为 pub(self) 在一个模块中。这和没有的私有函数有什么不同? pub 属性?如果它们不不同,为什么会存在这种语法?

    1 回复  |  直到 8 年前
        1
  •  9
  •   starblue    8 年前

    这个 pub(restricted) 语法介绍于 RFC 1422 .它引入了两种指定可见性的新方法:

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

    pub(self) 句法上的糖分 pub(in self) 属于第二类: self 只是一条路 super ,请 ::foo ,请 bar::baz 等等。这意味着,是的, 发布(self) 使项目对当前模块树可见。

    因此, 发布(self) 等于省略 发布(self) 宣言 .这甚至是说 in the RFC 以下内容:

    如上所述,定义意味着 pub(self) item 就像一个人刚写的 item .

    RFC还提到了支持这一点的原因:

    支持这种通用性级别的主要原因是宏:可以编写扩展到 pub($arg) 项,宏客户端可以传入 自己 作为 $arg 以获得非发布定义的效果。

    推荐文章