【问题标题】:How can I do a mutable borrow in a for loop?如何在 for 循环中进行可变借用?
【发布时间】:2017-01-30 01:43:21
【问题描述】:

我试过了:

fn main() {
    let mut vec = [1, 2, 3];
    
    for mut x in &vec { *x = 3; }
    for mut &x in &vec { x = 3; }
    for mut *x in &vec { x = 3; }
    for mut x in mut &vec { *x = 3; }
    for mut x in &(mut vec) { *x = 3; }
}

这些都不起作用;我该怎么做?

我收到如下错误:

  • mut 必须附加到每个单独的绑定中
  • 预期的标识符,找到*
  • 预期的表达式,找到关键字mut
  • 不能分配给*x,它位于& 引用后面

【问题讨论】:

    标签: for-loop rust mutable borrow-checker


    【解决方案1】:

    您可能需要重新阅读The Rust Programming Language,特别是以下部分:

    我们还可以对可变向量中每个元素的可变引用进行迭代,以便对所有元素进行更改。示例 8-9 中的 for 循环将向每个元素添加 50

    let mut v = vec![100, 32, 57];
    for i in &mut v {
        *i += 50;
    }
    

    示例 8-9:迭代向量中元素的可变引用

    要更改可变引用所引用的值,我们必须先使用解引用运算符 (*) 来获取 i 中的值,然后才能使用 += 运算符。

    另外,可以调用iter_mut方法:

    let mut v = vec![100, 32, 57];
    for i in v.iter_mut() {
        *i += 50;
    }
    

    另见:


    请注意,您的变量不是向量。它是一个数组。

    【讨论】:

    • 谢谢。我完全错过了for mut x in &(mut vec) 的无括号版本
    猜你喜欢
    • 2018-10-11
    • 1970-01-01
    • 2018-03-05
    • 2022-01-11
    • 1970-01-01
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多