gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 08:13:05 25 4
gpt4 key购买 nike

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

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]。为什么我不改变第二个参数?

最佳答案

看来我误解了解构中的“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();
}
}

关于rust - 为什么我不能通过迭代器可变引用来改变切片,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24809070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com