From e163290f2514d093a9f51103f9905f278045e7ae Mon Sep 17 00:00:00 2001 From: "Peng Hailin," Date: Wed, 26 Apr 2023 20:46:49 +0800 Subject: [PATCH] Update Ch13 --- src/Ch13_Functional_Language_Features_Iterators_and_Closures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Ch13_Functional_Language_Features_Iterators_and_Closures.md b/src/Ch13_Functional_Language_Features_Iterators_and_Closures.md index fbbeb4e..a27abce 100644 --- a/src/Ch13_Functional_Language_Features_Iterators_and_Closures.md +++ b/src/Ch13_Functional_Language_Features_Iterators_and_Closures.md @@ -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` 特质