我是使用rust 的新手,遇到了错误
std::vec::Vec<i32>
cannot be built fromstd::iter::Iterator<Item=&i32>
尝试使用函数
get_even_numbers()
通过按引用v
而不是按值&v
传递借入v
时。fn main() {
let v: Vec<i32> = (0..10).collect();
let even: Vec<i32> = get_even_numbers(&v);
println!("Even numbers: {:?}", even);
}
fn get_even_numbers(v: &Vec<i32>) -> Vec<i32> {
v.iter().filter(|x| x % 2 == 0).collect()
}
为何上面的代码会给出错误,但按值传递却没有,如下所示?另外,我在通过引用传递时在函数内部使用了
.iter()
,而在通过值传递时在函数内部使用了.into_iter()
,不确定是否这些是正确的函数。fn main() {
let v: Vec<i32> = (0..10).collect();
let even: Vec<i32> = get_even_numbers(v);
println!("Even numbers: {:?}", even);
}
fn get_even_numbers(v: Vec<i32>) -> Vec<i32> {
v.into_iter().filter(|x| x % 2 == 0).collect()
}
// Even numbers: [0, 2, 4, 6, 8]
最佳答案
使用v.iter().filter(|x| x % 2 == 0).cloned().collect()
。这将(平凡地)将每个&i32
引用克隆为实际的i32
值。
关于rust - rust 错误: value of type `std::vec::Vec<i32>` cannot be built from `std::iter::Iterator<Item=&i32>` ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64199782/