如何修改数组的最后一项?

时间:2016-05-05 05:29:31

标签: arrays rust

由于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);
}

2 个答案:

答案 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];