我试图打印出一些基本数据的编码十六进制字符串,我插入作为如何序列化/反序列化数据的一课。然而,要做到这一点,我必须实现一个迭代器的结构,有一个单一的元素类型Vec。我得到了下面的错误,不明白为什么,我意识到我的代码是不完整的next()实现。我是相当新的迭代器,任何帮助将不胜感激。错误:第一个
lp0sw83n1#
你的问题有点模糊,但让我们试着看看我们能做些什么:
如果要逐字节处理数据,可以迭代数据本身:
for hex in my_data.data { ... }
您也可以返回data上的迭代器,而不向代码的其余部分公开该字段:
data
impl MyData { fn iter_data(&self) -> impl Iterator<Item = &MyHex> { self.data.iter() } } ... for hex in my_data.iter_data() { ... }
实现IntoIterator如果你想让MyData作为迭代器工作,你可以为它实现IntoIterator特征:
IntoIterator
MyData
impl<'a> IntoIterator for &'a MyData { type Item = &'a MyHex; type IntoIter = std::slice::Iter<'a, MyHex>; fn into_iter(self) -> Self::IntoIter { self.data.iter() } } ... for v in &my_data { println!("{:?}", v); }
Playground为MyData实现Iterator要实现Iterator,需要提供next方法,每次调用该方法都会返回迭代器中的下一项,只要还有剩余项。为此,需要在MyData中添加一个字段,用于跟踪返回的最后一项,并在每次调用next()时递增该指针。但是从你的代码中我猜这并不是你真正想要的东西。宁愿选择前面的一个选项。
Iterator
next
next()
1条答案
按热度按时间lp0sw83n1#
你的问题有点模糊,但让我们试着看看我们能做些什么:
正在迭代内部字段
如果要逐字节处理数据,可以迭代数据本身:
迭代但不公开内部字段
您也可以返回
data
上的迭代器,而不向代码的其余部分公开该字段:实现
IntoIterator
如果你想让
MyData
作为迭代器工作,你可以为它实现IntoIterator
特征:Playground
为
MyData
实现Iterator
要实现
Iterator
,需要提供next
方法,每次调用该方法都会返回迭代器中的下一项,只要还有剩余项。为此,需要在MyData
中添加一个字段,用于跟踪返回的最后一项,并在每次调用next()
时递增该指针。但是从你的代码中我猜这并不是你真正想要的东西。宁愿选择前面的一个选项。