Технически, потому что формальный аргумент r
из random_vecs
не является изменяемым, и с помощью &mut r
в теле вы пытаетесь создать изменяемую ссылку на него.
Вот упрощенный пример с основами того, что вы делаете:
fn modify0(r: &mut usize) {
*r += 1;
}
fn modify1(r: &mut usize) {
modify0(&mut r);
}
fn main() {
let mut a = 1;
modify1(&mut a);
println!("Hello, {:?}!", a);
}
Сообщение об ошибке
error[E0596]: cannot borrow immutable argument `r` as mutable
--> src/main.rs:6:18
|
6 | modify0(&mut r);
| ^ cannot borrow mutably
help: consider removing the `&mut`, as it is an immutable binding to a mutable reference
Чтобы исправить это, вы можете сделать его изменяемым (нет, это не очень хорошая идея, даже если он работает здесь):
fn modify1(mut r: &mut usize) {
modify0(&mut r);
}
Лучше следовать предложению в сообщении об ошибке и удалить лишнее &mut
:
fn modify1(r: &mut usize) {
modify0(r);
}