为什么List包装在IntoIter中?

时间:2016-11-25 04:11:12

标签: iterator rust

Learning Rust With Entirely Too Many Linked Lists一书中,在 "countchat":{ "$account": { ".read": "$account === auth.uid", ".write": "auth != null", } }, 的{​​{3}}中,为什么IntoIter包含在元组结构中?相反,可以为List实施Iterator

1 个答案:

答案 0 :(得分:1)

是的,在这种情况下,Iterator可以在技术上List实施。这通常不正确,因为迭代器可能需要不在基本容器中的不同状态(例如,Vec迭代器可能需要将索引存储到下一个项以便有效迭代。 / p>

一个原因是如果实现将来发生变化并且List迭代器在额外状态下会更好,则可以在不更改任何调用者的情况下更改迭代器结构。

另一个原因是,在Rust中,使用类型来缩小接口以减少出错的可能性是很常见的。如果直接实现Iterator(并且可能IntoIterator返回self),那么用户可以在迭代期间调用其他List方法,这可能是错误的。相反,迭代器是一个单独的类型,这意味着在迭代期间不会有人推动项目。 (请注意,在for循环中,由于借用/移动规则,无论如何都很难做到这一点,但总的来说仍然存在。)