由于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);
}
Run Code Online (Sandbox Code Playgroud)
如果只需要最后一个,可以使用 std::slice::last_mut
fn double_last(arr: &mut[i32]) -> &i32 {
let last = arr.last_mut().unwrap();
*last *= 2;
last
}
Run Code Online (Sandbox Code Playgroud)
希望通过引入非词汇生命周期以及未来很快发生的变化来解决这个问题(似乎可以解决?)。
但现在,您可以通过拆分该计算来满足借用检查器的要求:
let n = arr.len() - 1;
let last = &mut arr[n];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1333 次 |
| 最近记录: |