由于arr
被借用为可变,因此arr
的长度无法通过调用len()
获得。我被困在这里,做正确的方法是什么?
fn double_last(arr: &mut[i32]) -> &i32 {
let last = &mut arr[arr.len() - 1]; // borrow checker error.
//let last = &mut arr[3]; // fine
*last *= 2;
last
}
fn main() {
let mut a = [1,2,3,4];
println!("{}", double_last(&mut a));
println!("{:?}", a);
}
答案 0 :(得分:4)
如果您只需要最后一个,则可以使用std::slice::last_mut
fn double_last(arr: &mut[i32]) -> &i32 {
let last = arr.last_mut().unwrap();
*last *= 2;
last
}
答案 1 :(得分:2)
希望能够通过引入非词汇生命周期和未来的相应变化来解决这个问题(似乎可以解决?)。
现在,您可以通过拆分该计算来满足借用检查器:
let n = arr.len() - 1;
let last = &mut arr[n];