|
|
|
@ -146,7 +146,7 @@ error[E0603]: module `instrument` is private
|
|
|
|
|
之前我们讨论到模块的语法和组织代码的用途。Rust 采用模块还有另一个原因:模块是 Rust 中的 **私有性边界**(*privacy boundary*)。如果你希望函数或结构体是私有的,将其放入模块。私有性规则有如下:
|
|
|
|
|
|
|
|
|
|
* 所有项(函数、方法、结构体、枚举、模块和常量)默认是私有的。
|
|
|
|
|
* 可以使用 `pub` 关键字使项变为共有。
|
|
|
|
|
* 可以使用 `pub` 关键字使项变为公有。
|
|
|
|
|
* 不允许使用定义于当前模块的子模块中的私有代码。
|
|
|
|
|
* 允许使用任何定义于父模块或当前模块中的代码。
|
|
|
|
|
|
|
|
|
@ -154,7 +154,7 @@ error[E0603]: module `instrument` is private
|
|
|
|
|
|
|
|
|
|
### 使用 `pub` 关键字使项变为公有
|
|
|
|
|
|
|
|
|
|
示例 7-5 中的错误说 `instrument` 模块使私有的。让我们使用 `pub` 关键字标记 `instrument` 模块使其可以在 `main` 函数中使用。这些改变如示例 7-6 所示,它仍然不能编译,不过会产生一个不同的错误:
|
|
|
|
|
示例 7-5 中的错误说 `instrument` 模块是私有的。让我们使用 `pub` 关键字标记 `instrument` 模块使其可以在 `main` 函数中使用。这些改变如示例 7-6 所示,它仍然不能编译,不过会产生一个不同的错误:
|
|
|
|
|
|
|
|
|
|
<span class="filename">文件名: src/main.rs</span>
|
|
|
|
|
|
|
|
|
@ -696,6 +696,6 @@ pub fn clarinet() {
|
|
|
|
|
|
|
|
|
|
## 总结
|
|
|
|
|
|
|
|
|
|
Rust 提供了将包组织进 crate、将 crate 组织进模块和通过指定绝对或相对路径从一个模块引用另一个模块中定义的项的方式。可以通过 `use` 语句将路径引入作用域,这样在多次使用时可以使用更短的路径。模块定义的代码默认时私有的,不过可以选择增加 `pub` 关键字使其定义变为公有。
|
|
|
|
|
Rust 提供了将包组织进 crate、将 crate 组织进模块和通过指定绝对或相对路径从一个模块引用另一个模块中定义的项的方式。可以通过 `use` 语句将路径引入作用域,这样在多次使用时可以使用更短的路径。模块定义的代码默认是私有的,不过可以选择增加 `pub` 关键字使其定义变为公有。
|
|
|
|
|
|
|
|
|
|
接下来,让我们看看一些标准库提供的集合数据类型,你可以利用它们编写出漂亮整洁的代码。
|