我正在尝试理解迭代器和可变性。我有以下代码,基本上应该将一个切片复制到另一个切片。
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]。为什么我不改变第二个参数?
答案 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();
}
}