是的,在这种情况下Iterator
可以从技术上实现List
。通常情况并非如此,因为迭代器可能需要基本容器中不存在的其他状态(例如,Vec
迭代器可能需要存储指向下一项的索引才能有效地进行迭代)。
原因之一是,如果将来对实现进行更改,并且List
迭代器具有附加状态会更好,那么可以更改迭代器结构而无需更改任何调用程序。
另一个原因是,在Rust中,通常使用类型来缩小接口的范围,以减少出错的机会。如果Iterator
直接实现(大概IntoIterator
返回self
),那么用户List
就有可能在迭代过程中调用其他方法,这可能是错误的。相反,迭代器是一个单独的类型,这意味着在迭代过程中不可能有人将项目推入。(请注意,for
由于存在借用/移动规则,因此在循环中还是很难做到这一点,但总的来说仍然存在)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句