2014-07-17 74 views
1

我试图了解迭代器和可变性。我有以下代码应该基本上将一个切片复制到另一个切片。为什么我不能通过迭代器可变参考

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

您需要使用'mut_iter()'而不是'iter()'。 –

回答

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(); 
    } 
} 
相关问题