From c14852610b4159795ab8b40eaa6c90e662fe65f8 Mon Sep 17 00:00:00 2001 From: Unisko PENG Date: Mon, 17 Apr 2023 17:19:57 +0800 Subject: [PATCH] Update Ch10 --- src/Ch10_Generic_Types_Traits_and_Lifetimes.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md index c316cb0..6d79156 100644 --- a/src/Ch10_Generic_Types_Traits_and_Lifetimes.md +++ b/src/Ch10_Generic_Types_Traits_and_Lifetimes.md @@ -889,7 +889,7 @@ fn main() { > 注意:清单 10-16、10-17 及 10-23 中的示例,均在不带变量初始值下,声明出了一些变量,而变量名存在于外层作用域中。乍一看,这样做似乎与 Rust 的无空值,Rust's having no `null` values,特性相抵触。不过,当咱们尝试于赋予变量值之前,使用某个变量,就会得到一个编译器时报错,这就表示 Rust 实际上是不允许空值的。 -外层作用域声明了一个名为 `r` 不带初始值的变量,同时内层作用域声明了一个名为 `x` 带有初始值 `5` 的变量。在那个内层作用域里头,这里尝试了将 `r` 的值设置为到 `x` 的一个引用。随后那个内层作用域便结束了,而这里尝试打印 `r` 中的值。由于 `r` 所指向的值,在这里尝试使用之前就已超出作用域,因此此代码不会编译。下面就是错误消息: +那个外层作用域声明了个名为 `r`、不带初始值的变量,而其中的内层作用域声明了个名为 `x`,带有初始值 `5` 的变量。在内层作用域里,咱们尝试将 `r` 的值,设置为到 `x` 的引用。随后那个内层作用域便结束了,同时咱们尝试打印 `r` 中的值。由于其中 `r` 所指向的值,在咱们尝试使用前已超出作用域,因此此代码不会编译。下面是错误消息: ```console $ cargo run lennyp@vm-manjaro @@ -909,7 +909,7 @@ For more information about this error, try `rustc --explain E0597`. error: could not compile `lifetimes_demo` due to previous error ``` -变量 `x` 未 “存活足够长时间。” 原因就是在内层作用域于第 7 行结束处,变量 `x` 便超出了作用域。然而对于外层作用域,变量 `r` 仍是有效的;有望变量 `r` 的作用域要大一些,这里就讲变量 `x` 就要 “存活得长一些”。若 Rust 允许此代码工作,那么变量 `r` 就会引用到在变量 `x` 超出作用域时,已被解除分配的内存,并且任何尝试在变量 `x` 下的操作,都将不会正确工作。那么 Rust 是怎样判定此代码无效的呢?他运用了一种借用检查器。 +变量 `x` 未 “存活足够长时间。” 原因是当内层作用域在第 7 行结束时,变量 `x` 将超出作用域。然而变量 `r` 对外层作用域仍有效;由于其作用域更大,咱们就说变量其 “存活得更长”。若 Rust 允许此代码工作,变量 `r` 就会引用变量 `x` 超出作用域时,已被解除分配的内存,且咱们尝试对变量 `x` 的任何操作,都将不会正确工作。那么 Rust 是怎样确定出此代码无效的呢?他使用了借用检查器,a borrow checker。 ### 借用检查器