为什么Fn派生自FnMut(源自FnOnce)?

Kap*_*chu 5 traits rust

如果你在看官方锈病文档,你看到特质Fn来源于FnMut,或实现Fn,你必须实现FnMut(和之后FnOnce,因为FnMut还提炼出来的).

为什么会这样?我根本无法理解.是因为你可以把每个人Fn称为FnOnceFnMut

She*_*ter 5

对此最好的参考是Rust博客帖子中出色的Finding Closure.我引用一些重要部分:

有三个特征,所以有七个非空的特征可以实现......但实际上只有三个有趣的配置:

  • Fn,FnMutFnOnce,
  • FnMut而且FnOnce,
  • FnOnce.

为什么?好吧,三个闭包特征实际上是三个嵌套集:每个实现的闭包也Fn可以实现FnMut(如果&self works,&mut self也可以工作;证明:) &*self,同样每个闭包实现FnMut也可以实现FnOnce.此层次结构在类型级别强制执行