如果您查看official Rust doc,就会发现特征Fn
来自FnMut
,或者要实施Fn
,您必须实施FnMut
(之后FnOnce
,因为FnMut
也来自它)。
为什么会这样?我根本无法理解这一点。是因为您可以将每个Fn
称为FnOnce
或FnMut
吗?
答案 0 :(得分:5)
最好的参考是优秀的Finding Closure in Rust博文。我引用一些重要部分:
有三个特征,所以有七个非空的特征可以实现......但实际上只有三个有趣的配置:
Fn
,FnMut
和FnOnce
,FnMut
和FnOnce
,- 仅
FnOnce
。为什么呢?好吧,三个闭包特征实际上是三个嵌套集:实现
Fn
的每个闭包也可以实现FnMut
(如果&self works
,&mut self
也可以;证据:{{1同样,实现&*self
的每个闭包也可以实现FnMut
。此层次结构在类型级别强制执行