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