在Learning Rust With Entirely Too Many Linked Lists一书中,在 "countchat":{
"$account": {
".read": "$account === auth.uid",
".write": "auth != null",
}
},
的{{3}}中,为什么IntoIter
包含在元组结构中?相反,可以为List
实施Iterator
。
答案 0 :(得分:1)
是的,在这种情况下,Iterator
可以在技术上List
实施。这通常不正确,因为迭代器可能需要不在基本容器中的不同状态(例如,Vec
迭代器可能需要将索引存储到下一个项以便有效迭代。 / p>
一个原因是如果实现将来发生变化并且List
迭代器在额外状态下会更好,则可以在不更改任何调用者的情况下更改迭代器结构。
另一个原因是,在Rust中,使用类型来缩小接口以减少出错的可能性是很常见的。如果直接实现Iterator
(并且可能IntoIterator
返回self
),那么用户可以在迭代期间调用其他List
方法,这可能是错误的。相反,迭代器是一个单独的类型,这意味着在迭代期间不会有人推动项目。 (请注意,在for
循环中,由于借用/移动规则,无论如何都很难做到这一点,但总的来说仍然存在。)