更改找到的项目中的值

pid*_*pid 3 rust

我正在尝试查找并更改迭代器中的特定项目,如下所示:

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?它只是结构中的一个整数,它是我获得迭代器的向量中的几个整数之一。

Net*_*ave 5

只需使用iter_mut而不是当iter您需要改变值时:

match self.list.iter_mut().find(...) {...}
Run Code Online (Sandbox Code Playgroud)

操场