rust语言可见性限定符(visibility modifier)

在 Rust开发标准中,可见性限定符(Visibility Modifiers)用于控制程序项(如函数、结构体、模块等)在不同作用域下的访问权限默认情况下,Rust 中的所有项都是私有的,仅在定义它们的模块及其子模块中可见

以下是 Rust 中主要的可见性限定符及其适用范围:

1. 基础修饰符

  • (无修饰符):私有。仅在当前模块及其后代子模块中可见。
  • pub:公有。该项对外部 crate 以及当前 crate 的任何位置都是可见的,前提是其父模块链也必须是公有的。 

2. 受限公有(Restricted Public)

通过在 pub 后添加括号,可以实现更精细的访问控制:
  • pub(crate):在当前整个 crate(即同一个包内)中可见,但不对外部 crate 开放。
  • pub(super):仅对父级模块(即上一层模块)及其后代可见,相当于 pub(in super)
  • pub(self):仅对当前模块可见,与默认的私有行为一致,通常用于宏或为了语法一致性。
  • pub(in <path>):在指定的模块路径中可见。路径必须是当前项的某个祖先模块。从 Rust 2018 版开始,该路径必须以 crateself 或 super 开头。 

3. 特殊项的可见性

  • 结构体字段:即使结构体本身是 pub,其字段默认仍是私有的。必须显式为每个字段添加 pub 或受限修饰符才能在模块外访问。
  • 枚举成员:与结构体不同,如果一个枚举被声明为 pub,则其所有的变体(variants)和字段默认都是公有的。
总结对照表
 
限定符可见性范围
pub 全局(当前 crate 及外部 crate)
pub(crate) 仅限当前 crate 内部
pub(super) 仅限父模块及其子模块
pub(in path) 仅限指定的祖先模块内部
(无) / pub(self) 仅限当前模块及其子模块
最佳实践建议: 遵循“最小特权原则”,尽量减小可见性范围。例如,若某个功能只需在 crate 内部共享,请使用 pub(crate) 而非 pub,以防止泄露内部实现细节并减少对外部 API 兼容性的维护压力。
 参考资料:
1.rust RFC 1422
 
 
posted @ 2025-12-26 17:30  PKICA  阅读(2)  评论(0)    收藏  举报