我有一个我想要迭代的可索引类型.它由一些元数据和一个数组组成.我需要首先迭代元数据的字节,然后迭代到数组的字节.根据我的理解,迭代器不能在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])
}
}
Run Code Online (Sandbox Code Playgroud)
这就是我认为实现应该是这样的.的index变量属于迭代器性状.不是我的IndexableData类型.我怎样才能做到这一点?
小智 6
的Iterator应该是一个独立的结构,其具有到集合再加上它可能需要的任何其它数据(诸如此指数)的引用.集合对象本身不应该是迭代器.这不仅需要在集合中放置错误的附加元数据,还会阻止您在集合上拥有多个独立的迭代器.