gpt4 book ai didi

iterator - 是否有类似 Iterator 的特征返回在下一次访问之前必须超出范围的引用?

转载 作者:行者123 更新时间:2023-11-29 08:21:14 28 4
gpt4 key购买 nike

这将使安全地迭代同一元素两次成为可能,或者为在项目类型中迭代的全局事物保持某种状态。

类似于:

trait IterShort<Iter>
where Self: Borrow<Iter>,
{
type Item;

fn next(self) -> Option<Self::Item>;
}

那么一个实现可能是这样的:

impl<'a, MyIter> IterShort<MyIter> for &'a mut MyIter {
type Item = &'a mut MyItem;

fn next(self) -> Option<Self::Item> {
// ...
}
}

我知道我可以自己写(我刚刚写了),但我想要一个可以使用 for 循环符号的代码。这可能吗?

最佳答案

std::iter::Iterator trait 做不到这一点,但你可以写一个不同的 trait:

trait StreamingIterator {
type Item;
fn next<'a>(&'a mut self) -> Option<&'a mut Self::Item>;
}

请注意,next 的返回值借用了迭代器本身,而在 Vec::iter 中,例如它仅借用了向量。

缺点是 &mut 是硬编码的。使其通用化需要更高级的类型(这样 StreamingIterator::Item 本身就可以在整个生命周期参数中通用化)。

Alexis Beingessner 在 RustCamp 上发表了关于此的演讲以及更多题为 谁拥有此数据流? .

至于 for 循环,它们实际上与 std::iter::IntoIterator 相关联,而 std::iter::IntoIteratorstd::iter::Iterator。您只需要同时实现两者。

关于iterator - 是否有类似 Iterator 的特征返回在下一次访问之前必须超出范围的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41837805/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com