我想改变对象向量的特定属性的值。
我的代码和逻辑如下:
let mut person_found: Vec<Person> = persons.clone().into_iter().filter(|x| x.id == "3")
.map(|x| x.name = "Carlos".to_string()).collect();
println!("original: {:?}", &persons);
println!("modified person: {:?}", &person_found);
但它给了我以下错误,我不能很好地理解它。
error[E0277]: a value of type `Vec<Person>` cannot be built from an iterator over elements of type `()`
--> src\main.rs:17:45
|
17 | .map(|x| x.name = "Carlos".to_string()).collect();
| ^^^^^^^ value of type `Vec<Person>` cannot be built from `std::iter::Iterator<Item=()>`
|
= help: the trait `FromIterator<()>` is not implemented for `Vec<Person>`
2条答案
按热度按时间r7xajy2e1#
赋值的结果是
()
(the unit value),所以如果你做y = (x = 123);
,那么x
被赋值为123
,y
被赋值为()
。rust 参考有一个简短的句子,说明:
赋值表达式总是生成the unit value。
你需要修改一下,这样它就可以在下一行显式地返回
x
,如果你想修改x
,那么你也需要把|x|
修改为|mut x|
。或者,我不是预先克隆整个
persons
Vec
,而是在map()
中的filter()
或clone()
之后使用cloned()
,即仅在需要时使用。yhxst69z2#
在map expr行中没有返回任何内容。但是可以使用
filter_map
进行处理:Playground