首页 文章

为什么List包装在IntoIter中?

提问于
浏览
1

Learning Rust With Entirely Too Many Linked Lists的书中 IntoIterimplementation中,为什么 List 包含在元组结构中?相反,可以为 List 实施 Iterator .

1 回答

  • 1

    是的,在这种情况下,技术上可以为 List 实施 Iterator . 这不是基本容器中的内容(例如, Vec 迭代器可能需要将索引存储到下一个项目以便有效地迭代) .

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

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

相关问题