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

时间:2015-07-02 17:19:56

标签: rust traits

如果您查看official Rust doc,就会发现特征Fn来自FnMut,或者要实施Fn,您必须实施FnMut (之后FnOnce,因为FnMut也来自它)。

为什么会这样?我根本无法理解这一点。是因为您可以将每个Fn称为FnOnceFnMut吗?

1 个答案:

答案 0 :(得分:5)

最好的参考是优秀的Finding Closure in Rust博文。我引用一些重要部分:

  

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

     
      
  • FnFnMutFnOnce
  •   
  • FnMutFnOnce
  •   
  • FnOnce
  •   
     

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

相关问题