Skip to content

Commit e7f8779

Browse files
committed
Merge pull request #116 from F001/patch-7
修改闭包的措辞
2 parents 0c92d39 + 9cfbe33 commit e7f8779

1 file changed

Lines changed: 2 additions & 2 deletions

File tree

13-closure/13-03-as_argument_return_value.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,7 @@ Box::new(|x| x + num)
194194
^~~~~~~~~~~
195195
```
196196

197-
好吧,正如我们上面讨论的,闭包借用他们的环境。而且在这个例子中。我们的环境基于一个栈分配的`5``num`变量绑定。所以这个借用有这个栈帧的生命周期。所以如果我们返回了这个闭包,这个函数调用将会结束,栈帧也将消失,那么我们的闭包获得了被释放的内存环境!再有最后一个修改,我们就可以让它运行了:
197+
好吧,正如我们上面讨论的,闭包借用他们的环境。而且在这个例子中。我们的环境基于一个栈分配的`5``num`变量绑定。所以这个借用有这个栈帧的生命周期。所以如果我们返回了这个闭包,这个函数调用将会结束,栈帧也将消失,那么我们的闭包指向了被释放的内存环境!再有最后一个修改,我们就可以让它运行了:
198198

199199
```rust
200200
fn factory() -> Box<Fn(i32) -> i32> {
@@ -210,6 +210,6 @@ assert_eq!(6, answer);
210210
# }
211211
```
212212

213-
通过把内部闭包变为`move Fn`,我们为闭包创建了一个新的栈帧。通过`Box`装箱,我们提供了一个已知大小的返回值,并允许它离开我们的栈帧。
213+
通过把内部闭包添加`move`关键字,我们强制闭包使用 move 的方式捕获环境变量。因为这里的 num 类型是 i32,实际上这里的 move 执行的是 copy, 这样一来,闭包就不再拥有指向环境的指针,而是完整拥有了被捕获的变量。并允许它离开我们的栈帧。
214214

215215
> ### 这部分引用自[The Rust Programming Language中文版](https://github.com/KaiserY/rust-book-chinese/blob/master/content/Closures%20%E9%97%AD%E5%8C%85.md)

0 commit comments

Comments
 (0)