为什么我不能通过迭代器可变引用来改变切片

时间:2014-07-17 16:38:36

标签: rust

我正在尝试理解迭代器和可变性。我有以下代码,基本上应该将一个切片复制到另一个切片。

fn equate<T>(in_slice: &[T], out_slice: &mut [T]){
    for (ref i, ref mut o) in in_slice.iter().zip(out_slice.iter()){
        *o = *i;
    }
}

代码编译,但是当我测试它时,out_slice参数没有改变。

let slice_test_in = [1i, 2i, 3i];
let mut slice_test_out = [0i, 0i, 0i];
equate(slice_test_in, slice_test_out);
调用后,

slice_test_out仍为[0,0,0]。为什么我不改变第二个参数?

1 个答案:

答案 0 :(得分:4)

似乎我在解构中误解了'ref'关键字。它增加了一个间接层,而不是像我想的那样删除一个。结合@Athiwat的mut_iter()建议,解决了这个问题。

fn equate<T: Clone>(in_slice: &[T], out_slice: &mut [T]){
    for (i, o) in in_slice.iter().zip(out_slice.mut_iter()){
        *o = i.clone();
    }
}