我有一个我想要迭代的可索引类型。它由一些元数据和一个数组组成。我需要首先迭代元数据的字节,然后迭代到数组的字节。根据我的理解,迭代器不能在trait实现的本地存储。我认为这是非常混乱的,我不希望我的数据类型因满足无关的影响而变得混乱。
impl Iterator for IndexableData {
type Item = u8
let index : isize = 0;
fn next(& mut self) -> Option<Item> {
if self.index > self.len() { None }
if self.index > size_of::<Metadata> {
Some (self.data[index - size_of::<Metadata>])
}
Some (self.metadata[index])
}
}
这就是我认为实现应该是这样的。迭代器特征中的index
变量属于。不是我的IndexableData
类型。我怎样才能做到这一点?
答案 0 :(得分:6)
Iterator
应该是一个单独的结构,它具有对集合的引用以及它可能需要的任何其他数据(例如此索引)。集合对象本身应该不是迭代器。这不仅需要在集合中放置错误的附加元数据,还会阻止您在集合上拥有多个独立的迭代器。