Rust数组迭代器修改错误,此处发生对借用的“x[_]”的赋值

bqf10yzr  于 2023-02-04  发布在  其他
关注(0)|答案(1)|浏览(112)

我正在学习rust,运行下面的代码.我想改变数组的每个值

use rand::Rng;

// fn main() {
//     let mut x: [i32; 30] = [1; 30];
//     for (index, value) in x.iter().enumerate() {
//         // no worker
//         x[index] = rand::thread_rng().gen_range(1..100);
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ assignment to borrowed `x[_]` occurs here
//         println!("{}",  x[index]);
//     }
// }

fn main() {
    let mut x = [1; 30];
    let enumerate = x.iter().enumerate();
    for index in 0..x.len() {
        // worker!
        x[index] = rand::thread_rng().gen_range(1..100);
        println!("{}",  x[index]);
    }
}

我想知道为什么

dzjeubhm

dzjeubhm1#

发生错误的原因是代码试图修改迭代器正在使用的数组。若要解决此问题,您需要使用允许您修改数组的迭代器。
在Rust中,iter()iter_mut()是有区别的。iter()返回一个迭代器,允许只读访问数组元素,而iter_mut()返回一个迭代器,允许可变访问数组元素。
因此,在代码中,不使用x.iter().enumerate(),而是使用x.iter_mut().enumerate()来获得一个迭代器,该迭代器允许修改x的元素:

use rand::Rng;

fn main() {
    let mut x: [i32; 30] = [1; 30];
    for (_, value) in x.iter_mut().enumerate() {
        *value = rand::thread_rng().gen_range(1..100);
        println!("{}",  *value);
    }
}

相关问题