Merge pull request #657 from ljkgpxs/patch-1

Update ch07-02-defining-modules-to-control-scope-and-privacy.md
This commit is contained in:
KaiserY 2022-10-22 18:18:45 +08:00 committed by GitHub
commit 9d756a7b66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 3 additions and 3 deletions

View File

@ -13,8 +13,8 @@
这里我们提供一个简单的参考,用来解释模块、路径、`use`关键词和`pub`关键词如何在编译器中工作,和大部分开发者如何组织他们的代码。我们将在这个章节中对每条规则的例子一一列举,但这是一个用来参考的好地方用于表达模块是如何工作的。 这里我们提供一个简单的参考,用来解释模块、路径、`use`关键词和`pub`关键词如何在编译器中工作,和大部分开发者如何组织他们的代码。我们将在这个章节中对每条规则的例子一一列举,但这是一个用来参考的好地方用于表达模块是如何工作的。
- **从crate根节点开始**: 当编译一个crate, 编译器首先在crate根文件通常对于一个库crate而言是*src/lib.rs*对于一个二进制crate而言是*src/main.rs*)中寻找需要被编译的代码。 - **从crate根节点开始**: 当编译一个crate, 编译器首先在crate根文件通常对于一个库crate而言是*src/lib.rs*对于一个二进制crate而言是*src/main.rs*)中寻找需要被编译的代码。
- **声明模块**: 在crate根文件中你可以声明一个新模块比如你用`mod garden`声明了一个叫做`garden`的模块。编译器会在下列路径中寻找模块代码: - **声明模块**: 在crate根文件中你可以声明一个新模块比如你用`mod garden`声明了一个叫做`garden`的模块。编译器会在下列路径中寻找模块代码:
- 内联, 在大括号中,当`mod garden`后方不是一个分号而是一个大括号 - 内联在大括号中,当`mod garden`后方不是一个分号而是一个大括号
- 在文件 *src/garden.rs* - 在文件 *src/garden.rs*
- 在文件 *src/garden/mod.rs* - 在文件 *src/garden/mod.rs*
- **声明子模块**: 在除了crate根节点以外的其他文件中你可以定义子模块。比如你可能在*src/garden.rs*中定义了`mod vegetables;`。编译器会在以父模块命名的目录中寻找子模块代码: - **声明子模块**: 在除了crate根节点以外的其他文件中你可以定义子模块。比如你可能在*src/garden.rs*中定义了`mod vegetables;`。编译器会在以父模块命名的目录中寻找子模块代码:

View File

@ -94,7 +94,7 @@
<span class="caption">示例 7-17: 通过 `pub use` 使名称可从新作用域中被导入至任何代码</span> <span class="caption">示例 7-17: 通过 `pub use` 使名称可从新作用域中被导入至任何代码</span>
通过 `pub use`,外部代码现在可以通过新路径 `hosting::add_to_waitlist` 来调用 `add_to_waitlist` 函数。如果没有指定 `pub use``eat_at_restaurant` 函数可以在其作用域中调用 `hosting::add_to_waitlist`,但外部代码则不允许使用这个新路径 通过 `pub use`重导出,外部代码现在可以通过新路径 `restaurant::hosting::add_to_waitlist` 来调用 `add_to_waitlist` 函数。如果没有指定 `pub use`外部代码需在其作用域中调用 `restaurant::front_of_house::hosting::add_to_waitlist`
当你代码的内部结构与调用你代码的程序员所想象的结构不同时,重导出会很有用。例如,在这个餐馆的比喻中,经营餐馆的人会想到“前台”和“后台”。但顾客在光顾一家餐馆时,可能不会以这些术语来考虑餐馆的各个部分。使用 `pub use`,我们可以使用一种结构编写代码,却将不同的结构形式暴露出来。这样做使我们的库井井有条,也使开发这个库的程序员和调用这个库的程序员都更加方便。 当你代码的内部结构与调用你代码的程序员所想象的结构不同时,重导出会很有用。例如,在这个餐馆的比喻中,经营餐馆的人会想到“前台”和“后台”。但顾客在光顾一家餐馆时,可能不会以这些术语来考虑餐馆的各个部分。使用 `pub use`,我们可以使用一种结构编写代码,却将不同的结构形式暴露出来。这样做使我们的库井井有条,也使开发这个库的程序员和调用这个库的程序员都更加方便。