如何将我的 Vec 发送到以 Iterator 作为参数的函数?
How can I send my Vec to a function taking an Iterator as a parameter?
我有一个问题,我有一个接受特定结构类型的 Iterator
的函数,我想发送包含相同结构类型作为参数的 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();
}
您的问题是 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());
我有一个问题,我有一个接受特定结构类型的 Iterator
的函数,我想发送包含相同结构类型作为参数的 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();
}
您的问题是 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());