我正在学习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]);
}
}
我想知道为什么
1条答案
按热度按时间dzjeubhm1#
发生错误的原因是代码试图修改迭代器正在使用的数组。若要解决此问题,您需要使用允许您修改数组的迭代器。
在Rust中,
iter()
和iter_mut()
是有区别的。iter()
返回一个迭代器,允许只读访问数组元素,而iter_mut()
返回一个迭代器,允许可变访问数组元素。因此,在代码中,不使用
x.iter().enumerate()
,而是使用x.iter_mut().enumerate()
来获得一个迭代器,该迭代器允许修改x
的元素: