gpt4 book ai didi

rust - 将 Vec 作为 Iterator 传递给函数

转载 作者:行者123 更新时间:2023-11-29 08:25:54 27 4
gpt4 key购买 nike

我想做的事情:

  • 我有一个包含另一个结构的 Vec 的结构。
  • 我会不时更新这个Vec
  • 我想将此 Vec 作为 Iterator 传递给另一个函数。

下面是一段简短的代码片段,说明我想如何做事,但我无法让它编译我所做的一切:

struct Main {
data: Vec<OtherStruct>
}

callFunctionHere(self.data.iter());

pub fn callFunctionHere<I>(data: I)
where
I: Iterator<Item = OtherStruct>,
{
// for i in data...
}

我可以将数据作为某种新的复制对象传递吗?

最佳答案

您需要 Iterator<Item = &OtherStruct> 的特征界限, 自 Vec<T>::iter返回 referencesT 的迭代器.生成 T 的迭代器值必须将它们移出向量,这只有在向量本身被消耗时才是安全的,这就是 Vec<T>::into_iter()

请注意,您还需要指定引用的生命周期,与数据的生命周期相关联:

fn some_function<'a, I>(data: I)
where
I: Iterator<Item = &'a Other> + 'a,
{
for el in data {
println!("{:?}", el)
}
}

完整示例 in the playground .

最后,值得指出的是,一般情况下,首选请求 IntoIterator 绑定(bind)而不是 Iterator .自 Iterator工具 IntoIterator ,这样的函数将继续接受迭代器,但也会接受可以转换为迭代器的对象。在这种情况下,它将接受 &s.data除了s.data.iter() .

关于rust - 将 Vec 作为 Iterator 传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58778955/

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