споткнулся на такой забавный момент. Пока не понимаю причины
Такой код ругается на наличие изменяемой и неизменяемой ссылки одновременно
fn foo(nums: &mut[u32]) {
todo!()
}
fn main() {
let mut nums = [1, 2, 3, 4, 5, 6, 7];
foo(&mut nums[0..nums.len() - 1]);
}
error[E0502]: cannot borrow `nums` as immutable because it is also borrowed as mutable
--> src/main.rs:7:22
|
7 | foo(&mut nums[0..nums.len() - 1]);
| --------^^^^^^^^^^-----
| | |
| | immutable borrow occurs here
| mutable borrow occurs here
| mutable borrow later used here
а такой проходит нормально
fn main() {
let mut nums = [1, 2, 3, 4, 5, 6, 7];
let last = nums.len() - 1;
foo(&mut nums[0..last]);
}
Мне казалось что первый код должен автоматом переходить во второй. Но получается диапазоны вносят какие-то модификации в этот алгоритм.