Merge pull request #806 from zhaodiaoer/fix-closure-translate

fix: error translation about how closure implement Fn traits
pull/807/head
KaiserY 4 months ago committed by GitHub
commit c265000083
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

@ -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` 方法的定义:

Loading…
Cancel
Save