Update ch07-02-controlling-visibility-with-pub.md

pull/260/head
庄秋彬 6 years ago committed by GitHub
parent 0503399ec0
commit da4eecf8ee
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -87,7 +87,7 @@ error[E0603]: function `connect` is private
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
``` ```
非常好!另一个不同的错误!好的,不同的错误信息也是值得庆祝的(可能是程序员被黑的最惨的一次)。新错误表明“函数 `connect` 是私有的”,那么让我们修改 *src/client.rs*`client::connect` 也设为公有: 非常好!另一个不同的错误!好的,不同的错误信息也是值得庆祝的。新错误表明“函数 `connect` 是私有的”,那么让我们修改 *src/client.rs*`client::connect` 也设为公有:
<span class="filename">文件名: src/client.rs</span> <span class="filename">文件名: src/client.rs</span>
@ -118,7 +118,7 @@ warning: function is never used: `connect`
编译通过了,关于 `client::connect` 未被使用的警告消失了! 编译通过了,关于 `client::connect` 未被使用的警告消失了!
未被使用的代码并不总是意味着它们需要被设为公有的:如果你 **不** 希望这些函数成为公有 API 的一部分,未被使用的代码警告可能是在提醒你这些代码不再需要并可以安全删除它们。这也可能是警告你出 bug 了,如果你刚刚不小心删除了库中所有这个函数的调用。 未被使用的代码并不总是意味着它们需要被设为公有的:如果你 **不** 希望这些函数成为公有 API 的一部分,未被使用的代码警告可能是在提醒你这些代码不再需要并可以安全删除它们。这也可能是警告你出 bug 了,如果你刚刚不小心删除了库中所有这个函数的调用。
当然我们的情况是,**确实** 希望另外两个函数也作为 crate 公有 API 的一部分,所以让我们也将其标记为 `pub` 并去掉剩余的警告。修改 *src/network/mod.rs* 为: 当然我们的情况是,**确实** 希望另外两个函数也作为 crate 公有 API 的一部分,所以让我们也将其标记为 `pub` 并去掉剩余的警告。修改 *src/network/mod.rs* 为:
@ -151,7 +151,7 @@ warning: function is never used: `connect`
| |_^ | |_^
``` ```
虽然将 `network::connect` 设为 `pub` 了我们仍然得到了一个未被使用函数的警告。这是因为模块中的函数是公有的,不过函数所在的 `network` 模块却不是公有的。这回我们是自内向外修改库文件的,而 `client::connect` 的时候是自外向内修改的。我们需要修改 *src/lib.rs*`network` 也是公有的,如下: 虽然将 `network::connect` 设为 `pub`我们仍然得到了一个未被使用函数的警告。这是因为模块中的函数是公有的,不过函数所在的 `network` 模块却不是公有的。这回我们是自内向外修改库文件的,而 `client::connect` 的时候是自外向内修改的。我们需要修改 *src/lib.rs*`network` 也是公有的,如下:
<span class="filename">文件名: src/lib.rs</span> <span class="filename">文件名: src/lib.rs</span>
@ -178,7 +178,7 @@ warning: function is never used: `connect`
### 私有性规则 ### 私有性规则
总的来说,有如下项的可见性规则: 总的来说,有如下可见性规则:
1. 如果一个项是公有的,它能被任何父模块访问 1. 如果一个项是公有的,它能被任何父模块访问
2. 如果一个项是私有的,它能被其直接父模块及其任何子模块访问 2. 如果一个项是私有的,它能被其直接父模块及其任何子模块访问

Loading…
Cancel
Save