Skip to content

Commit

Permalink
Merge pull request #806 from zhaodiaoer/fix-closure-translate
Browse files Browse the repository at this point in the history
fix: error translation about how closure implement Fn traits
  • Loading branch information
KaiserY authored Jul 21, 2024
2 parents 503a926 + 68f7487 commit c265000
Showing 1 changed file with 3 additions and 3 deletions.
6 changes: 3 additions & 3 deletions src/ch13-01-closures.md
Original file line number Diff line number Diff line change
Expand Up @@ -143,9 +143,9 @@ let add_one_v4 = |x| x + 1 ;

闭包捕获和处理环境中的值的方式影响闭包实现的 trait。Trait 是函数和结构体指定它们能用的闭包的类型的方式。取决于闭包体如何处理值,闭包自动、渐进地实现一个、两个或三个 `Fn` trait。

1. `FnOnce` 适用于能被调用一次的闭包,所有闭包都至少实现了这个 trait,因为所有闭包都能被调用。一个会将捕获的值移出闭包体的闭包只实现 `FnOnce` trait,这是因为它只能被调用一次。
2. `FnMut` 适用于不会将捕获的值移出闭包体的闭包,但它可能会修改被捕获的值。这类闭包可以被调用多次。
3. `Fn` 适用于既不将被捕获的值移出闭包体也不修改被捕获的值的闭包,当然也包括不从环境中捕获值的闭包。这类闭包可以被调用多次而不改变它们的环境,这在会多次并发调用闭包的场景中十分重要。
1. `FnOnce` 适用于能被调用一次的闭包,所有闭包都至少实现了这个 trait,因为所有闭包都能被调用。一个会将捕获的值移入闭包体的闭包只实现 `FnOnce` trait,这是因为它只能被调用一次。
2. `FnMut` 适用于不会将捕获的值移入闭包体的闭包,但它可能会修改被捕获的值。这类闭包可以被调用多次。
3. `Fn` 适用于既不将被捕获的值移入闭包体也不修改被捕获的值的闭包,当然也包括不从环境中捕获值的闭包。这类闭包可以被调用多次而不改变它们的环境,这在会多次并发调用闭包的场景中十分重要。

让我们来看示例 13-1 中使用的在 `Option<T>` 上的 `unwrap_or_else` 方法的定义:

Expand Down

0 comments on commit c265000

Please sign in to comment.