为什么在 Rust 中允许将向量中的整数值分配给另一个变量? [英] Why is assigning an integer value from a vector to another variable allowed in Rust?

查看:31
本文介绍了为什么在 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);
}

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

Shouldn't the ownership of first element in the array be given to largest and hence it shouldn't be usable in loop?

推荐答案

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

number_list is a list of integers, and integers implement the Copy trait, which means that they are never moved, but are copied instead. For this reason the array keeps ownership of its elements, and largest and number get copies of these elements.

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

If you try to do the same with a non-copy type, then you get an error:

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

这篇关于为什么在 Rust 中允许将向量中的整数值分配给另一个变量?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆