From ac78341d89daac421af47cef50cc4a9fb128385d Mon Sep 17 00:00:00 2001 From: Diazepam <77@diazepam.cc> Date: Fri, 30 Aug 2024 15:26:50 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=AD=A3ch13-01-closures.md=E7=BF=BB?= =?UTF-8?q?=E8=AF=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ch13-01-closures.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ch13-01-closures.md b/src/ch13-01-closures.md index 169c6c9..b178cb7 100644 --- a/src/ch13-01-closures.md +++ b/src/ch13-01-closures.md @@ -131,7 +131,7 @@ let add_one_v4 = |x| x + 1 ; 示例 13-6:使用 `move` 来强制闭包为线程获取 `list` 的所有权 -我们生成了一个新的线程,并给这个线程传递一个闭包作为参数来运行,闭包体打印出列表。在示例 13-4 中,闭包仅通过不可变引用捕获了 `list`,因为这是打印列表所需的最少的访问权限。这个例子中,尽管闭包体依然只需要不可变引用,我们还是在闭包定义前写上 `move` 关键字,以确保 `list` 被移动到闭包中。新线程可能在主线程剩余部分执行完前执行完,或者也可能主线程先执行完。如果主线程维护了 `list` 的所有权但却在新线程之前结束并且丢弃了 `list`,则在线程中的不可变引用将失效。因此,编译器要求 `list` 被移动到在新线程中运行的闭包中,这样引用就是有效的。试着移除 `move` 关键字,或者在闭包定义后在主线程中使用 `list`,看看你会得到什么编译器报错! +我们生成了一个新的线程,并给这个线程传递一个闭包作为参数来运行,闭包体打印出列表。在示例 13-4 中,闭包仅通过不可变引用捕获了 `list`,因为这是打印列表所需的最少的访问权限。这个例子中,尽管闭包体依然只需要不可变引用,我们还是在闭包定义前写上 `move` 关键字,以确保 `list` 被移动到闭包中。新线程可能在主线程剩余部分执行完前执行完,也可能在主线程执行完之后执行完。如果主线程维护了 `list` 的所有权但却在新线程之前结束并且丢弃了 `list`,则在线程中的不可变引用将失效。因此,编译器要求 `list` 被移动到在新线程中运行的闭包中,这样引用就是有效的。试着移除 `move` 关键字,或者在闭包定义后在主线程中使用 `list`,看看你会得到什么编译器报错!