我正在试图在表的行上构建一个迭代器,并且我使用了一个库来读取这个文件。这个库有一个适当的迭代器。我想知道如何链接这两个迭代器,我的意思是,当我在迭代器上调用下一个迭代器时,也调用下一个lib调用。
impl Iterator for MyStruct {
type Item = item;
fn next(&mut self) -> Option<Self::Item> {
records().next()
}
}我这样做了,但是每次只调用第一次,我需要库迭代器的所有行。
发布于 2022-08-11 19:16:51
通过在records()函数中调用next(),您每次都要创建一个新的迭代器,因此在每次next()调用时都要从头开始。
您需要将records迭代器存储在结构中,然后重用它,而不是每次都重新创建它。这样,它就能在呼叫之间保持状态。
请看下面的示例:
fn records() -> impl Iterator<Item = i32> {
(1..5).into_iter()
}
struct MyStruct {
records_iter: Box<dyn Iterator<Item = i32>>,
}
impl MyStruct {
fn new() -> Self {
Self {
records_iter: Box::new(records()),
}
}
}
impl Iterator for MyStruct {
type Item = i32;
fn next(&mut self) -> Option<Self::Item> {
self.records_iter.next()
}
}
fn main() {
let my_obj = MyStruct::new();
for element in my_obj {
println!("{}", element);
}
}1
2
3
4https://stackoverflow.com/questions/73325480
复制相似问题