File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -141,7 +141,7 @@ assert_eq!(10, num);
141141
142142那么在这个例子中,我们的闭包取得了一个` num ` 的可变引用,然后接着我们调用了` add_num ` ,它改变了其中的值,正如我们期望的。我们也需要将` add_num ` 声明为` mut ` ,因为我们会改变它的环境。
143143
144- 如果我们改为一个 ` move ` 闭包,这有些不同 :
144+ 如果我们加上 ` move ` 修饰闭包,会发生些不同 :
145145
146146``` rust
147147let mut num = 5 ;
@@ -155,9 +155,8 @@ let mut num = 5;
155155assert_eq! (5 , num );
156156```
157157
158- 我们只会得到` 5 ` 。与其获取一个我们` num ` 的可变借用,我们取得了一个拷贝的所有权。
159-
160- 另一个理解` move ` 闭包的方法:它给出了一个拥有自己栈帧的闭包。没有` move ` ,一个闭包可能会绑定在创建它的栈帧上,而` move ` 闭包则是独立的。例如,这意味着大体上你不能从函数返回一个非` move ` 闭包。
158+ 我们只会得到` 5 ` 。这次我们没有获取到外部的` num ` 的可变借用,我们实际上是把 ` num ` move 进了闭包。因为 ` num ` 具有 Copy 属性,因此发生 move 之后,以前的变量生命周期并未结束,还可以继续在 ` assert_eq! ` 中使用。我们打印的变量和闭包内的变量是独立的两个变量。如果我们捕获的环境变量不是 Copy 的,那么外部环境变量被 move 进闭包后,
159+ 它就不能继续在原先的函数中使用了,只能在闭包内使用。
161160
162161不过在我们讨论获取或返回闭包之前,我们应该更多的了解一下闭包实现的方法。作为一个系统语言,Rust给予你了大量的控制你代码的能力,而闭包也是一样。
163162> ### 这部分引用自[ The Rust Programming Language中文版] ( https://github.com/KaiserY/rust-book-chinese/blob/master/content/Closures%20%E9%97%AD%E5%8C%85.md )
You can’t perform that action at this time.
0 commit comments