I see表示函数的可见性可以在模块内声明为pub(self).这与没有pub属性的私有函数有何不同?如果它们没有区别,为什么会存在这种语法?

推荐答案

pub(restricted)语法是在RFC 1422年引入的.它引入了两种指定可见性的新方法:

  • pub(crate):使物品对当前的整个 crate 可见,但不超过此范围.
  • pub(in path::to::module):使该项对路径指定的模块树可见.

pub(self)pub(in self)的语法糖,它属于第二类:self只是一条路径,比如super::foobar::baz等等.这意味着,是的,pub(self)使该项对当前模块树可见.

因此,101 is equivalent to omitting the 101 declaration.这甚至被称为in the RFC:

如上所述,这个定义意味着pub(self) item等同于一个人只写了item.

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

支持这种通用性的主要原因(在其他方面只是"冗余语法")是宏:可以编写扩展到pub($arg)项的宏,宏客户机可以将self作为$arg传递,以获得非发布定义的效果.

Rust相关问答推荐

为什么父作用域中的变量超出了子作用域

如何从使用mockall模拟的方法中返回self?

当Option为None时,Option数组是否占用Rust中的内存?

如何使用Match比较 struct 中的值

创建包含缺失值的框架

使用模块中的所有模块,但不包括特定模块

在Rust中宏的表达式中提取对象

有没有办法避免在While循环中多次borrow `*分支`

使用极点数据帧时,找不到枚举结果的方法lazy()

是否可以使用Rust宏来构建元组的项?

当对VEC;U8>;使用serde_json时,Base64编码是保护空间的好方法吗?

如何实现Deref;多次;?

使用 Option 来分配?

Rust 中指向自身的引用如何工作?

Rust中的位移操作对范围有什么影响?

第 7.4 章片段中如何定义 `thread_rng`

无法把握借来的价值不够长寿,请解释

为什么我不能为 Display+Debug 的泛型类型实现 std::error::Error 但有一个不是泛型参数的类型?

在 Rust 中组合特征的不同方法是否等效?

为什么我不能将元素写入 Rust 数组中移动的位置,但我可以在元组中完成