From 0eace53a4d0ebf24704205f49ad029cec7629123 Mon Sep 17 00:00:00 2001 From: ljkgpxs Date: Fri, 21 Oct 2022 16:22:43 +0800 Subject: [PATCH 1/2] Update ch07-02-defining-modules-to-control-scope-and-privacy.md --- src/ch07-02-defining-modules-to-control-scope-and-privacy.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) 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;`。编译器会在以父模块命名的目录中寻找子模块代码: From 69f393a8cfe358c0cf8e25c7d559e285fe97afb3 Mon Sep 17 00:00:00 2001 From: ljkgpxs Date: Fri, 21 Oct 2022 17:25:00 +0800 Subject: [PATCH 2/2] Update ch07-04-bringing-paths-into-scope-with-the-use-keyword.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 添加缺失代码,去除无意义语句 其中原文为:Before this change, external code would have to call the add_to_waitlist function by using the path restaurant::front_of_house::hosting::add_to_waitlist(). Now that this pub use has re-exported the hosting module from the root module, external code can now use the path restaurant::hosting::add_to_waitlist() instead. --- src/ch07-04-bringing-paths-into-scope-with-the-use-keyword.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) 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`,我们可以使用一种结构编写代码,却将不同的结构形式暴露出来。这样做使我们的库井井有条,也使开发这个库的程序员和调用这个库的程序员都更加方便。