我是生锈的新手,遇到了错误
std::vec::Vec<i32>
无法从std::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]
答案 0 :(得分:2)
使用v.iter().filter(|x| x % 2 == 0).cloned().collect()
。这将(平凡地)将每个&i32
引用克隆为实际的i32
值。