gpt4 book ai didi

rust - 按值从原始类型引用复制的惯用方法是什么?

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

考虑以下片段:

fn example(current_items: Vec<usize>, mut all_items: Vec<i32>) {
for i in current_items.iter() {
let mut result = all_items.get_mut(i);
}
}

编译器提示 i&mut usize 而不是 usize:

error[E0277]: the trait bound `&usize: std::slice::SliceIndex<[()]>` is not satisfied
--> src/lib.rs:3:36
|
3 | let mut result = all_items.get_mut(i);
| ^^^^^^^ slice indices are of type `usize` or ranges of `usize`
|
= help: the trait `std::slice::SliceIndex<[()]>` is not implemented for `&usize`

我已经仔细研究了文档,但我认为满足编译器要求的唯一方法是 i.clone()

我肯定在这里遗漏了一些明显的东西。按值从原始类型引用复制的惯用方法是什么?

最佳答案

iter()Vec<T>返回一个实现 Iterator<&T> 的迭代器,也就是说,这个迭代器将产生对向量的引用。这是最常见的行为,可以方便地使用不可复制的类型。

然而,原始类型(实际上,任何实现了 Copy 特性的类型)无论如何都会在取消引用时被复制,所以你只需要这个:

for i in current_items.iter() {
let mut result = all_items.get_mut(*i);
}

或者,您可以使用引用解构模式:

for &i in current_items.iter() {
let mut result = all_items.get_mut(i);
}

现在iusize自动取消引用,您无需手动取消引用。

关于rust - 按值从原始类型引用复制的惯用方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53694107/

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