是否可以在特征实现中使用变量本地变量?

时间:2015-12-30 14:30:06

标签: rust

我有一个我想要迭代的可索引类型。它由一些元数据和一个数组组成。我需要首先迭代元数据的字节,然后迭代到数组的字节。根据我的理解,迭代器不能在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类型。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:6)

Iterator应该是一个单独的结构,它具有对集合的引用以及它可能需要的任何其他数据(例如此索引)。集合对象本身应该是迭代器。这不仅需要在集合中放置错误的附加元数据,还会阻止您在集合上拥有多个独立的迭代器。