【问题标题】:Why is assigning an integer value from a vector to another variable allowed in Rust?为什么 Rust 允许将向量中的整数值分配给另一个变量?
【发布时间】:2019-10-15 13:29:18
【问题描述】:
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);
}

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

【问题讨论】:

标签: rust borrow-checker


【解决方案1】:

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]`

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-29
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 2015-04-12
    • 1970-01-01
    相关资源
    最近更新 更多