Rust 中 pub 关键字的作用是什么?

· 约 8 分钟读完 · 第 101 / 179 章

推荐答案

在 Rust 中,pub 关键字用于控制模块、函数、结构体、枚举、常量等项的可见性。使用 pub 可以将这些项标记为公开的,从而允许其他模块或外部代码访问它们。

本题详细解读

1. pub 关键字的基本用法

在 Rust 中,默认情况下,模块内的所有项(如函数、结构体、枚举等)都是私有的,只能在定义它们的模块内部访问。如果希望这些项能够在其他模块或外部代码中被访问,就需要使用 pub 关键字将它们标记为公开的。

例如:

在上面的代码中,public_function 被标记为 pub,因此可以在 main 函数中调用。而 private_function 是私有的,只能在 my_module 模块内部访问。

2. pub 关键字的其他用法

除了标记函数为公开的,pub 还可以用于结构体、枚举、常量等项。例如:

在这个例子中,PublicStruct、PublicEnum 和 PUBLIC_CONST 都被标记为 pub,因此可以在 main 函数中访问。

3. pub 与模块层级

pub 关键字还可以与模块层级结合使用,控制模块内部的可见性。例如:

在这个例子中,inner_module 和 inner_function 都被标记为 pub,因此可以在 main 函数中访问。

4. pub 与结构体字段

对于结构体,pub 关键字还可以用于控制字段的可见性。例如:

在这个例子中,field1 被标记为 pub,因此可以在 main 函数中访问。而 field2 是私有的,只能在 my_module 模块内部访问。

5. pub 与枚举变体

对于枚举,pub 关键字可以用于控制枚举变体的可见性。例如:

在这个例子中,PublicEnum 被标记为 pub,因此可以在 main 函数中访问其变体。

6. pub 与常量

对于常量,pub 关键字可以用于控制常量的可见性。例如:

在这个例子中,PUBLIC_CONST 被标记为 pub,因此可以在 main 函数中访问。

7. pub 与模块重导出

pub 关键字还可以用于模块重导出(re-exporting),即将一个模块中的项重新导出到另一个模块中。例如:

在这个例子中,inner_function 被重导出到 my_module 中,因此可以在 main 函数中直接通过 my_module::inner_function 访问。

8. pub 与 crate 可见性

在 Rust 中,pub 关键字还可以与 crate 关键字结合使用,控制项在当前 crate 内的可见性。例如:

在这个例子中,crate_visible_function 被标记为 pub(crate),因此可以在当前 crate 内的任何地方访问,但在 crate 外部无法访问。

9. pub 与 super 可见性

pub 关键字还可以与 super 关键字结合使用,控制项在父模块中的可见性。例如:

在这个例子中,parent_visible_function 被标记为 pub(super),因此可以在 outer_module 中访问,但在 main 函数中无法访问。

10. pub 与 in 可见性

pub 关键字还可以与 in 关键字结合使用,控制项在指定路径中的可见性。例如:

在这个例子中,module_visible_function 被标记为 pub(in crate::outer_module),因此可以在 outer_module 中访问,但在 main 函数中无法访问。