Rust 为什么可以';通过迭代器可变引用对切片进行变异

Rust 为什么可以';通过迭代器可变引用对切片进行变异,rust,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; } } 调用后,slice_test_out仍然是[0,0,0]。为什么我不改变第二个参数?似乎我误解了分解中

我试图理解迭代器和易变性。我有下面的代码,基本上是将一个切片复制到另一个切片

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;
    }
}

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

似乎我误解了分解中的'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();
    }
}
fn相等(入片:&T,出片:&mut[T]){
对于(i,o)in_slice.iter().zip(out_slice.mut_iter()){
*o=i.clone();
}
}

似乎我误解了分解中的'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();
    }
}
fn相等(入片:&T,出片:&mut[T]){
对于(i,o)in_slice.iter().zip(out_slice.mut_iter()){
*o=i.clone();
}
}

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