mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2025-03-14 03:10:44 +08:00
Update Ch10
This commit is contained in:
parent
31e9c16e03
commit
c14852610b
@ -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。
|
||||
|
||||
|
||||
### 借用检查器
|
||||
|
Loading…
Reference in New Issue
Block a user