如果您查看Rust 官方文档 https://doc.rust-lang.org/std/ops/trait.Fn.html,你看到这个特质Fn
源自FnMut
,或者,实施Fn
,你必须实施FnMut
(在那之后FnOnce
since FnMut
也源自于此)。
为什么会这样?我简直无法理解这一点。是因为你可以调用每个Fn
as a FnOnce
or FnMut
?
最好的参考是优秀的在 Rust 中寻找封闭 http://huonw.github.io/blog/2015/05/finding-closure-in-rust/博客文章。我将引用重要部分:
有三个特征,因此可以实现七个非空特征集……但实际上只有三个有趣的配置:
-
Fn
, FnMut
and FnOnce
,
-
FnMut
and FnOnce
,
- only
FnOnce
.
为什么?嗯,这三个闭包特征实际上是三个嵌套集:每个实现的闭包Fn
还可以实施FnMut
(if &self works
, &mut self
也有效;证明:&*self
),类似地,每个闭包实现FnMut
还可以实施FnOnce
。此层次结构在类型级别强制执行
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)