fix: error translation about how closure implement Fn traits

Signed-off-by: zhaodiaoer <ddaaren@gmail.com>
This commit is contained in:
zhaodiaoer 2024-07-20 17:39:50 +08:00
parent 503a926e62
commit 68f74879ae
No known key found for this signature in database
GPG Key ID: 8C6E382DB4423201

View File

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