Nyx*_*nyx 5 iterator reference ownership rust
当我尝试使用函数通过引用而不是值传递来get_even_numbers()借用 vec时,我遇到了错误。v&vv
fn get_even_numbers(v: &Vec<i32>) -> Vec<i32> {
v.iter().filter(|x| x % 2 == 0).collect()
}
fn main() {
let v: Vec<i32> = (0..10).collect();
let even: Vec<i32> = get_even_numbers(&v);
println!("Even numbers: {:?}", even);
}
Run Code Online (Sandbox Code Playgroud)
fn get_even_numbers(v: &Vec<i32>) -> Vec<i32> {
v.iter().filter(|x| x % 2 == 0).collect()
}
fn main() {
let v: Vec<i32> = (0..10).collect();
let even: Vec<i32> = get_even_numbers(&v);
println!("Even numbers: {:?}", even);
}
Run Code Online (Sandbox Code Playgroud)
为什么上面会报错,而按值传入却不会报错,如下所示?
fn get_even_numbers(v: Vec<i32>) -> Vec<i32> {
v.into_iter().filter(|x| x % 2 == 0).collect()
}
fn main() {
let v: Vec<i32> = (0..10).collect();
let even: Vec<i32> = get_even_numbers(v);
println!("Even numbers: {:?}", even);
}
Run Code Online (Sandbox Code Playgroud)
error[E0277]: a value of type `Vec<i32>` cannot be built from an iterator over elements of type `&i32`
--> src/main.rs:2:37
|
2 | v.iter().filter(|x| x % 2 == 0).collect()
| ^^^^^^^ value of type `Vec<i32>` cannot be built from `std::iter::Iterator<Item=&i32>`
|
= help: the trait `FromIterator<&i32>` is not implemented for `Vec<i32>`
= help: the trait `FromIterator<T>` is implemented for `Vec<T>`
note: required by a bound in `collect`
Run Code Online (Sandbox Code Playgroud)
我.iter()在通过引用传递和按值传递时在函数内部使用.into_iter(),不确定这些是否是正确使用的函数。
使用v.iter().filter(|x| x % 2 == 0).cloned().collect()。这将(简单地)将每个&i32引用克隆为实际i32值。
| 归档时间: |
|
| 查看次数: |
4719 次 |
| 最近记录: |