Rust 我是否可以编写一个迭代器,使其自身发生变异,然后生成对自身的引用?

Rust 我是否可以编写一个迭代器,使其自身发生变异,然后生成对自身的引用?,rust,Rust,我遇到了一个简化为以下内容的问题: struct MyIter { vec: Vec<i8>, } fn fill_with_useful_data(v: &mut Vec<i8>) { /* ... */ } impl<'a> Iterator for MyIter { type Item = &'a [i8]; fn next(&mut self) -> Option<&'a

我遇到了一个简化为以下内容的问题:

struct MyIter {
    vec: Vec<i8>,
}

fn fill_with_useful_data(v: &mut Vec<i8>) {
    /* ... */
}

impl<'a> Iterator for MyIter {
    type Item = &'a [i8];

    fn next(&mut self) -> Option<&'a [i8]> {
        fill_with_useful_data(&mut self.vec);

        Some(&self.vec)
    }
}

fn main() {
    for slice in (MyIter { vec: Vec::new() }) {
        println!("{}", slice);
    }
}
struct MyIter{
维克:维克,
}
fn用有用的数据填充(v:&mut Vec){
/* ... */
}
impl选项src/main.rs:9:6
|

9 | impl这是不可能的。如果允许,可以再次调用
next
,从而修改通过
&
也可见的数据,甚至使引用完全无效。这是因为
self
对象本身与返回的引用之间没有连接:没有显式的生存期链接它们

为了让编译器对此进行推理并允许将引用返回到
self
中,接下来需要一个签名,如

fn next(&'a mut self) -> Option<&'a [i8]>

fn next(&'a mut self)->选择正确,我刚刚停止实现
Iterator
,并使用宏创建了自己的for循环。我没有想到
.collect()
怎么会不起作用。这对于不能使用
for
循环的遍历也很好:
而让一些(元素)=iter.next(){…
作为将来的参考,这种类型的迭代器(
fn next(&'a self)
)通常被称为流式迭代器。一些讨论示例和。