.last()
numaralı telefonu aradığınızda, nums
kodunu immutable olarak ödünç alırsınız, mutasyona uğrattığınız gibi, tuttuğunuz şekilde x
referansını geçersiz kılar. Ardından, nums
'u mutable olarak ödünç veren .push
numaralı telefonu arayın.
sorun artık bir değişmez ve (paslanmayan hafıza güvenlik teminatı aykırıdır aynı anda aynı değerde bir değişken ödünç olması birden okuyucular veya geçersiz hafızaya sahip asla tek yazar garantisi herhangi bir yer).
fn main() {
let mut nums = vec![1, 2, 3];
if let Some(x) = nums.last() { // Immutable borrow starts here
nums.push(*x); // Mutable borrow starts here
} // Immutable and mutable borrows end here
}
çözeltisi @ DanielSanchez örneğinde göre, derhal sonucun referans bırakarak değişmez borç ile kapsamını daha düşük olacaktır: Rust bilmeden
let mut nums = vec![1, 2, 3];
if let Some(&x) = nums.last() { // Immutable borrow starts and ends here
nums.push(x); // Mutable borrow starts here
} // Mutable borrow ends here
, bu nums durumu gibi olabilir nums.last() değeri olarak num.push() ile aynı ifadede .last(), sayıya yeni bir giriş iterken değişebilir. – jwenting