为什么在 Rust 中允许将向量中的整数值赋给另一个变量?
Why is assigning an integer value from a vector to another variable allowed in Rust?
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
特性,这意味着它们永远不会被移动,而是被复制。因此,数组保留其元素的所有权,并且 largest
和 number
获取这些元素的副本。
如果您尝试对非复制类型执行相同操作,则会出现错误:
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);
}
给出:
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]`
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
特性,这意味着它们永远不会被移动,而是被复制。因此,数组保留其元素的所有权,并且 largest
和 number
获取这些元素的副本。
如果您尝试对非复制类型执行相同操作,则会出现错误:
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);
}
给出:
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]`