iterator - 为什么 List 包裹在 IntoIter 中?

标签 iterator rust

在书中Learning Rust With Entirely Too Many Linked Lists , 在 implementation IntoIter,为什么 List 包含在元组结构中?相反,Iterator 可以为 List 实现。

最佳答案

是的,在这种情况下,技术上可以为 List 实现 Iterator。这通常不是真的,因为迭代器可能需要不在基础容器中的不同状态(例如,Vec 迭代器可能需要存储下一个项目的索引以有效迭代)。

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

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

关于iterator - 为什么 List 包裹在 IntoIter 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40797598/

相关文章:

c++ - 使用 boost::iterator

c++ - unordered_map 迭代器迭代到空指针,无视可能性

java - 迭代无父节点结构

rust - 在 Rust 中有效复制同一向量的非重叠切片

rust - 在必须使用 tonic::Status 的地方使用 Tonic 时如何处理外部错误?

rust - 在哪里可以找到我项目的 Rust 测试二进制文件?

c++ - 停留在 Trie 的迭代器实现上

python - TypeError:迭代 0-d 数组 Python

struct - 如何向结构体的字段添加约束以进行实例化?

generics - 在使用 Option::None 时,有没有办法提示编译器使用某种默认泛型类型?