Sil*_*olo 6 iterator bidirectional rust
Rust 的迭代有两个主要特征:Iterator可以按顺序遍历的标准,以及DoubleEndedIterator可以从后面额外迭代的标准。
这对我来说很有意义。许多有用的方法都定义在Iterator、map、filter等上。然后,从“后面”操作的东西,可以说,像rfind和 一样rfold被定义,DoubleEndedIterator因为这样的操作只在这样的迭代器上才有意义。
但我们有Iterator::rev
Run Code Online (Sandbox Code Playgroud)fn rev(self) -> Rev<Self> where Self: Sized + DoubleEndedIterator, { Rev::new(self) }
rev是一个定义的函数,但也有Iterator一个附加约束。SelfDoubleEndedIterator
定义此函数有什么实际好处Iterator?我们只能在DoubleEndedIterator实现者和DoubleEndedIterator扩展上调用它,Iterator因此我们永远不会遇到实现前者而不是后者的情况。那么为什么没有在like和arerev上定义呢?DoubleEndedIteratorrfindrfold