实现Iterator时的生命周期问题

我正在为几个结构实现Iterator特性并遇到一些问题.为什么实现Iterator for Rows显示错误?
这是一个链接:link to playground

基本上为什么这不起作用?

struct Stripe<'a> {
    cells: &'a [u32],
}

struct Rows<'a> {
    foo: &'a Foo,
    vec: Vec<u32>,
    first: bool,
}

impl<'a> std::iter::Iterator for Rows<'a> {
    type Item = Stripe<'a>;
    fn next(&mut self) -> Option<Stripe<'a>> {
        if self.first {
            self.first = false;
            Some(
                Stripe {
                    cells: &self.vec[0..1],
                }
            )
        } else {
            None
        }
    }
}
最佳答案
Row类型中的生命周期’a仅指该类型的一个字段.您返回的引用与该生命周期无关. Iterator特性不允许您将生命周期返回到迭代器对象本身.这将需要为下一个函数添加新的生命周期.

我建议你创建一个RowsIterator类型,引用你的Rows对象并处理那里的迭代器特定的东西:

struct Stripe<'a> {
    cells: &'a [u32],
}

struct Rows {
    vec: Vec<u32>,
}

struct RowsIter<'a> {
    rows: &'a Rows,
    first: bool,
}

impl<'a> std::iter::Iterator for RowsIter<'a> {
    type Item = Stripe<'a>;
    fn next(&mut self) -> Option<Stripe<'a>> {
        if self.first {
            self.first = false;
            Some(
                Stripe {
                    cells: &self.rows.vec[0..1],
                }
            )
        } else {
            None
        }
    }
}

完整的例子在playground

转载注明原文:实现Iterator时的生命周期问题 - 代码日志