我遇到一个问题,我有一个采用特定结构类型的Iterator
的函数,我想将包含相同结构类型作为参数的Vector发送给我的Vector
我不明白我在做什么错。我尝试了几种不同的方法:
vecName.iter()
,留下这个error: error[E0271]: type mismatch resolving <std::slice::Iter<'_, code_test_lib::gfx::AsteroidDrawData> as std::iter::Iterator>::Item == code_test_lib::gfx::AsteroidDrawData
vecName.into_iter()
,留下这个error: error[E0507]: cannot move out of borrowed content
&vecName.iter()
给我error: error[E0277]: &std::slice::Iter<'_, code_test_lib::gfx::AsteroidDrawData> is not an iterator
&vecName.into_iter()
给我:error[E0277]: &std::vec::IntoIter<code_test_lib::gfx::AsteroidDrawData> is not an iterator
我不知道如何将Vec
作为Iterator
发送到函数。
pub struct MyStruct {
pub dataA: f32,
pub dataB: f32,
}
struct MyProgram {
my_structs: Vec<MyStruct>,
}
pub trait BaseFunctions {
fn new() -> Self;
fn run(&mut self);
}
impl BaseFunctions for MyProgram {
fn new() -> Self {
//Create some data
let mut vec = Vec::new();
for x in 0..5 {
vec.push(MyStruct{
dataA: 1.0,
dataB: 1.0,
});
}
Self {
my_structs: vec,
}
}
fn run(&mut self) {
my_func(
self.my_structs.into_iter(),
);
}
}
pub fn my_func<Iter>(iter: Iter)
where
Iter: Iterator<Item = MyStruct>, {
for i in iter {
// Do something
}
}
fn main() {
let mut program = MyProgram::new();
program.run();
}
答案 0 :(得分:2)
您的问题是iter()
生成了一个Iterator
引用,而不是值。因此,您需要对功能有参考和终身使用。最好在IntoIterator
上设置边界以允许更多的通用性。
pub fn my_func<'a, Iter>(iter: Iter)
where
Iter: IntoIterator<Item = &'a MyStruct>,
{
for i in iter {
// Do something
}
}
像这样的my_func(&self.my_structs);
或my_func(self.my_structs.iter());