From df60b6c4f07cc3ec6974ba85f0229a55ff5bce62 Mon Sep 17 00:00:00 2001 From: Unisko PENG Date: Tue, 18 Apr 2023 17:42:02 +0800 Subject: [PATCH] Update Ch10 --- src/Ch10_Generic_Types_Traits_and_Lifetimes.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md index 078c213..5933673 100644 --- a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md +++ b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md @@ -981,7 +981,7 @@ fn main() { 请注意由于咱们不想要这个 `longest` 函数,取得其参数的所有权,因此咱们是要该函数取两个均为引用的字符串切片,而非字符串。请参考第 4 章中 [作为函数参数的字符串切片](Ch04_Understanding_Ownership.md#字符串切片作为函数参数) 小节,了解更多为何咱们在清单 10-19 中用到的参数,即为咱们所想要参数的讨论。 -在尝试如下面清单 10-20 中所示的那样,对这个 `longest` 函数加以实现时,那将仍不会编译。 +当咱们如下面清单 10-20 中所示的那样,尝试实现 `longest` 函数时,其不会编译。 文件名:`src/main.rs` @@ -994,10 +994,10 @@ fn longest(x: &str, y: &str) -> &str { } ``` -*清单 10-20:一种尚不会编译的返回两个字符串切片中较长者的 `longest` 函数实现* +*清单 10-20:返回两个字符串切片中较长者 `longest` 函数实现,但上不会编译* -相反,这里会得到以下的谈及生命周期的错误: +咱们而是会得到以下谈及生命周期的错误: ```console @@ -1019,7 +1019,7 @@ For more information about this error, try `rustc --explain E0106`. error: could not compile `lifetimes_demo` due to previous error ``` -该帮助性文字,揭示了由于 Rust 无法弄清返回的引用到底是指向 `x` 还是 `y`,因此返回值类型就需要其上的泛型声明周期函数(a generic lifetime parameter)。事实上,由于在该函数的函数体中,那个 `if` 代码块返回的时到参数 `x` 的引用,而其中的 `else` 代码块返回的是到 `y` 的引用,所以就连咱们也不清楚! +这个帮助性文本,揭示了由于 Rust 无法区分出正返回的引用,是指向 `x` 还是 `y`,因此返回值类型就需要其上的一个泛型生命周期参数,a generic lifetime parameter。事实上,由于在该函数的函数体中,`if` 代码块返回的是到参数 `x` 的引用,而 `else` 代码块返回的则是到 `y` 的引用,所以就连咱们也不清楚! 在对该函数进行定义时,是不清楚要传入到该函数的那些具体值的,因此就不清楚究竟是`if` 条件,还是 `else` 条件会被执行。这里也不清楚要传入的那些引用变量的具体声明周期,进而就无法查看如同清单 10-17 及 10-18 中所看到的那些作用域,来判断返回的引用变量是否始终有效。由于 Rust 的借用检查器不清楚其中 `x` 与 `y` 的生命周期,与返回值的生命周期有怎样的关联,因此借用检查器也无法对此做出判断。要修复这个错误,就要添加对这些引用变量之间关系进行定义的泛型生命周期参数,进而借用检查器就可以完成他的分析。