Problém je v tom, co je vlastně na let mut b = &a[..]
mutabilní. b je zde mutabilní proměnná držící typ &[i32]
, tedy nemutabilní referenci na řez polem. Takže b můžeme přiřadit jakoukoliv jinou hodnotu typu &[i32]
, ale nemáme mutabilní přístup k hodnotám pole.
let mut b = &a[2..6];
println!("{:?}", b); // [2, 3, 4, 5]
b = &b[1..];
println!("{:?}", b); // [3, 4, 5];
Naproti tomu let b = &mut a[2..6]
nabízí řez polem s mutabilním přístupem, ale samotné proměnné b nelze přiřadit jinou hodnotu typu &mut [i32]
.
let mut a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
{
let b = &mut a[2..6];
b[2] = 0;
println!("{:?}", b); // [2, 3, 0, 5]
}
println!("{:?}", a); // [0, 1, 2, 3, 0, 5, 6, 7, 8, 9]