gpt4 book ai didi

rust - 为什么在 Rust 中允许将向量中的整数值赋给另一个变量?

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

fn main() {
let number_list = vec![34, 50, 25, 100, 65];

let mut largest = number_list[0];

for number in number_list {
if number > largest {
largest = number;
}
}

println!("The largest number is {}", largest);
assert_eq!(largest, 100);
}

数组中第一个元素的所有权不应该给最大的,因此它不应该在循环中使用吗?

最佳答案

number_list 是一个整数列表,整数实现了 Copy trait,这意味着它们永远不会移动,而是被复制。出于这个原因,数组保留其元素的所有权,largestnumber 获取这些元素的副本。

如果您尝试对非复制类型执行相同操作,则会出现错误:

struct WrappedInt(i32);

fn main() {
let number_list = vec![34, 50, 25, 100, 65]
.into_iter()
.map(|x| WrappedInt(x))
.collect::<Vec<_>>();

let mut largest = number_list[0];

for number in number_list {
if number.0 > largest.0 {
largest = number;
}
}

println!("The largest number is {}", largest.0);
assert_eq!(largest.0, 100);
}

playground

给出:

error[E0507]: cannot move out of index of `std::vec::Vec<WrappedInt>`
--> src/main.rs:9:23
|
9 | let mut largest = number_list[0];
| ^^^^^^^^^^^^^^
| |
| move occurs because value has type `WrappedInt`, which does not implement the `Copy` trait
| help: consider borrowing here: `&number_list[0]`

关于rust - 为什么在 Rust 中允许将向量中的整数值赋给另一个变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58395921/

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