mirror of
https://github.com/gnu4cn/rust-lang-zh_CN.git
synced 2025-03-15 11:50:34 +08:00
Update Ch13
This commit is contained in:
parent
942075cf07
commit
e163290f25
@ -278,7 +278,7 @@ fn main() {
|
||||
|
||||
*清单 13-6:使用 `move` 关键字,强制那个线程的闭包取得 `list` 的所有权*
|
||||
|
||||
这里生成了一个新线程,将一个闭包作为参数给到这个线程来运行(we spawn a new thread, giving the thread a closure to run as an argument)。其中闭包的函数体,打印出这个清单。在代码清单 13-4 中,由于不可变引用是打印那里清单所需的最少量权限,因此那里的闭包只使用了不可变引用对 `list` 加以了捕获。而在这个示例中,即使其中的闭包函数体只需要不可变引用,这里仍需要通过把那个 `move` 关键字放置于闭包定义的开头,指明那个 `list` 应被迁移到该闭包中。这个新线程可能在主线程其余部分执行完毕之前就执行结束,或主线程可能先结束。若主线程仍保有 `list` 的所有权,而在新线程结束之前就结束,而丢弃掉 `list`,那么在那个线程中的 `list` 就会成为无效。因此,编译器就要求其中的 `list` ,被迁移到那个给到新线程的闭包中,如此那个引用就将有效。请尝试去掉这个 `move` 关键字,或在那个闭包被之后使用 `list`,来看看会得到什么编译器错误!
|
||||
咱们生成了一个新线程,给到线程一个闭包作为参数来运行,we spawn a new thread, giving the thread a closure to run as an argument。闭包的主体体会打印出清单。在代码清单 13-4 中,由于不可变引用是打印 `list` 所需的最低权限,因此闭包仅使用了不可变引用捕获 `list`。在这个示例中,即使闭包主体只需不可变引用,咱们仍需通过把 `move` 关键字放在闭包定义的开头,而指明 `list` 应被迁移到闭包中。新线程可能在主线程其余部分执行完毕前执行结束,也有可能主线程先结束。若主线程依然保有 `list` 的所有权,而主线程又在新线程结束之前就结束而弃用掉 `list`,那么新线程中的 `list` 就会成为无效。因此,编译器要求 `list` 要迁移到给新线程的闭包中,如此那个引用将有效。请尝试去掉 `move` 关键字,或在闭包被定义出后使用 `list`,来看看会得到什么样的编译器报错!
|
||||
|
||||
|
||||
### 将捕获到的值迁移出闭包与 `Fn` 特质
|
||||
|
Loading…
Reference in New Issue
Block a user