14、Visibility(可见性)
Visibility(可见性)
当你开始将代码分解成多个模块时,就需要开始考虑可见性问题。可见性决定了你的代码(或其他人的代码)中哪些区域可以访问给定的实体,无论是结构体、函数还是字段等。
默认私有
在 Rust 中,默认情况下一切都是私有的。 一个私有实体只能被访问于:
- 定义它的同一模块
- 其中一个子模块
在前面的练习中,我们已经广泛使用了这一功能。
create_todo_ticket
可以正常工作(一旦添加了use
声明),因为 helpers 是根crate的子模块,而 Ticket 就定义在根crate中。因此,即使 Ticket 是私有的,create_todo_ticket
也可以随意访问 Ticket(这属于第一条)。- 所有单元测试都是在他们所测试的代码子模块中被定义,所以它们可以不受限制的访问所有内容(这属于第二条)。
可见性修饰符
我们可以使用可见性修饰符
来修改一个实体的默认的可见性。
以下是一些常见的可见性修饰符
:
pub
:使实体变成public
(公有),即可以从定义它的模块外部访问,可能从其他crate访问。pub(crate)
:使实体在相同的crate中共有,但是不向外部公开。pub(super)
:让实体在父模块中公开。pub(in path::to::module)
:让实体在指定的模块中公开。
我们可以在模块,结构体,函数,字段等等上面使用可见性修饰符,比如:
pub struct Configuration {
pub(crate) version: u32,
active: bool,
}
Configuration
是public
的,但是只能在同一crate内部访问version
字段,active
是private
的,只能在同一模块或子模块中访问。
练习
这一节的练习有点抽象,没看懂……
我就把test.rs文件里面的那个代码注释掉,在lib.rs里面加上pub就结束了?
为什么要注释掉?
哦哦,想明白了,应该是里面的字段并没有设置pub属性,所以全都是私有的吧,然后就会报错……
那如果我全部改为公有呢?
很显然没有报错了
居然也通过了
估计问题就在于只给外部的实体添加pub,里面的字段依然是private吧。
这次的练习应该就是这个意思,正好下一节要讲封装,这里可能就涉及到了我刚才的操作的简便解法吧。
以上就是这节的学习内容了,呼~
阅读剩余
版权声明:
作者:CN059
链接:https://www.cn059.com/2025/09/02/14%e3%80%81visibility%ef%bc%88%e5%8f%af%e8%a7%81%e6%80%a7%ef%bc%89.html
文章版权归作者所有,未经允许请勿转载。
THE END