我正在尝试查找并更改迭代器中的特定项目,如下所示:
struct ItemType {
name: &'static str,
value: i32
}
struct OuterType {
list: Vec<ItemType>
}
impl OuterType {
pub fn setByName(
self: &mut Self,
name: &str
) -> Result<(), String> {
match self.list.iter().find(|item| item.name == name) {
Some(item_found) => {
item_found.value = 1;
},
None => {
return Err(format!("unrecognized item name (was \"{}\")", name));
}
}
Ok(())
}
}
Run Code Online (Sandbox Code Playgroud)
但这由于多种原因而无法编译,其中一些原因:
Copy特征(不想更改副本,我想就地更改项目);&(没有帮助);mut(没有帮助);item_found.valuea 后面的哪个&;&可能会被删除......(什么?);我也尝试过.find(|&item| ...)。
到底是怎么回事?难道我不能拥有 所返回的值吗find()?而我又该如何改变呢item_found.value?它只是结构中的一个整数,它是我获得迭代器的向量中的几个整数之一。
只需使用iter_mut而不是当iter您需要改变值时:
match self.list.iter_mut().find(...) {...}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
241 次 |
| 最近记录: |