如何在 for 循环中进行可变借用?

2024-01-10

I tried:

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这是后面一个&参考

您可能想重新阅读Rust 编程语言 https://doc.rust-lang.org/stable/book/,特别是以下部分:

  • 可变性 https://doc.rust-lang.org/stable/book/ch03-01-variables-and-mutability.html
  • 可变引用 https://doc.rust-lang.org/stable/book/ch04-02-references-and-borrowing.html#mutable-references
  • vectors https://doc.rust-lang.org/stable/book/ch08-01-vectors.html

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

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

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

要更改可变引用引用的值,我们必须使用解引用运算符(*) 得到其中的值i在我们可以使用之前+=操作员。

此外,您还可以致电iter_mut https://doc.rust-lang.org/std/primitive.slice.html#method.iter_mut method:

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

也可以看看:

  • 将“mut”放在变量名之前和“:”之后有什么区别? https://stackoverflow.com/q/28587698/155423
  • iter 和 into_iter 有什么区别? https://stackoverflow.com/q/34733811/155423

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 for 循环中进行可变借用? 的相关文章

随机推荐