diff --git a/book/contents/advance/functional-programing/closure.md b/book/contents/advance/functional-programing/closure.md index e51edbbe..ef442829 100644 --- a/book/contents/advance/functional-programing/closure.md +++ b/book/contents/advance/functional-programing/closure.md @@ -233,7 +233,7 @@ where 其实,可以看得出这一长串是 `T` 的特征约束,再结合之前的已知信息:`query` 是一个闭包,大概可以推测出,`Fn(u32) -> u32` 是一个特征,用来表示 `T` 是一个闭包类型?Bingo,恭喜你,答对了! -那为什么不用具体的类型来标注 `query` 呢?原因很简单,每一个闭包实例都有独属于自己的类型,甚至于两个签名一模一样的闭包,它们的类型都可能是不同的,因此你无法用一个统一的类型来标注 `query` 闭包。 +那为什么不用具体的类型来标注 `query` 呢?原因很简单,每一个闭包实例都有独属于自己的类型,即使于两个签名一模一样的闭包,它们的类型也是不同的,因此你无法用一个统一的类型来标注 `query` 闭包。 而标准库提供的 `Fn` 系列特征,再结合特征约束,就能很好的解决了这个问题. `T: Fn(u32) -> u32` 意味着 `query` 的类型是 `T`,该类型必须实现了相应的闭包特征 `Fn(u32) -> u32`。从特征的角度来看它长得非常反直觉,但是如果从闭包的角度来看又极其符合直觉,不得不佩服 Rust 团队的鬼才设计。。。