为什么在 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 特性,这意味着它们永远不会被移动,而是被复制。因此,数组保留其元素的所有权,并且 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]`