diff --git a/src/ch07-02-defining-modules-to-control-scope-and-privacy.md b/src/ch07-02-defining-modules-to-control-scope-and-privacy.md index 51c2e7c..65074d3 100644 --- a/src/ch07-02-defining-modules-to-control-scope-and-privacy.md +++ b/src/ch07-02-defining-modules-to-control-scope-and-privacy.md @@ -13,8 +13,8 @@ 这里我们提供一个简单的参考,用来解释模块、路径、`use`关键词和`pub`关键词如何在编译器中工作,和大部分开发者如何组织他们的代码。我们将在这个章节中对每条规则的例子一一列举,但这是一个用来参考的好地方用于表达模块是如何工作的。 - **从crate根节点开始**: 当编译一个crate, 编译器首先在crate根文件(通常,对于一个库crate而言是*src/lib.rs*,对于一个二进制crate而言是*src/main.rs*)中寻找需要被编译的代码。 -- **声明模块**: 在crate根文件中,你可以声明一个新模块;比如,你用过`mod garden`声明了一个叫做`garden`的模块。编译器会在下列路径中寻找模块代码: - - 内联, 在大括号中,当`mod garden`后方不是一个分号而是一个大括号 +- **声明模块**: 在crate根文件中,你可以声明一个新模块;比如,你用`mod garden`声明了一个叫做`garden`的模块。编译器会在下列路径中寻找模块代码: + - 内联,在大括号中,当`mod garden`后方不是一个分号而是一个大括号 - 在文件 *src/garden.rs* - 在文件 *src/garden/mod.rs* - **声明子模块**: 在除了crate根节点以外的其他文件中,你可以定义子模块。比如,你可能在*src/garden.rs*中定义了`mod vegetables;`。编译器会在以父模块命名的目录中寻找子模块代码: diff --git a/src/ch07-04-bringing-paths-into-scope-with-the-use-keyword.md b/src/ch07-04-bringing-paths-into-scope-with-the-use-keyword.md index d1ed12c..cebb253 100644 --- a/src/ch07-04-bringing-paths-into-scope-with-the-use-keyword.md +++ b/src/ch07-04-bringing-paths-into-scope-with-the-use-keyword.md @@ -94,7 +94,7 @@ 示例 7-17: 通过 `pub use` 使名称可从新作用域中被导入至任何代码 -通过 `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`,我们可以使用一种结构编写代码,却将不同的结构形式暴露出来。这样做使我们的库井井有条,也使开发这个库的程序员和调用这个库的程序员都更加方便。