【发布时间】:2019-10-19 15:58:56
【问题描述】:
看看skip_while 和take_while 这样的谓词,它们是
skip_while<P>(self, predicate P) -> ...
where Self: Sized, P: FnMut(&Self::Item) -> bool;
如果谓词只是返回真或假,而不修改值,为什么它必须是FnMut 而不是Fn(如Fn(&Self::Item) -> bool)?
【问题讨论】:
-
这样你就可以在你的闭包中有一个状态。 FnMut 意味着它可以改变它的状态play.rust-lang.org/…。正如 doc 所说“当您想要接受类似函数类型的参数并且需要重复调用它时,使用 FnMut 作为边界,同时允许它改变状态。如果您不希望参数改变状态,请使用 Fn 作为一个界限;如果您不需要重复调用它,请使用 FnOnce。" doc.rust-lang.org/std/ops/trait.FnMut.html
标签: rust iterator predicate type-signature