【问题标题】:Why doesnt Rust's index syntax for vectors take ownership of the element? [duplicate]为什么 Rust 的向量索引语法不获取元素的所有权? [复制]
【发布时间】:2018-08-07 23:13:18
【问题描述】:

当我阅读Rust documentation on generics 时,我发现了一个关于所有权的奇怪问题。看下面的sn-p:

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);
}

为什么largest 不获取vector 的第一个元素的所有权?我发现在之前的chapter about vectors 中,使用借用语法let largest = &v[0] 会取得元素的所有权。为什么这段代码会通过编译器?

【问题讨论】:

  • 整数实现复制所以它是一个副本。

标签: rust ownership


【解决方案1】:

许多原始类型实现the Copy trait - 这意味着当您将它们绑定到其他变量时它们会被复制。复制值时不存在所有权问题。

这仅用于演示目的,不是很实用……但是如果您将示例更改为使用简单的哑结构,您会发现它不再有效(因为它没有实现Copy) :

#[derive(Debug, PartialEq)]
struct S;

fn main() {
    let number_list = vec![S, S, S, S];

    let mut largest = number_list[0];

    for number in number_list {
        if number == largest {
            largest = number;
        }
    }
    println!("The largest number is {:?}", largest);
}

但是,如果你让它实现Copy(和Clone),它会运行良好:

#[derive(Clone, Copy, Debug, PartialEq)]
struct S;

You can play with it in the Playground here if you want

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-16
    • 2020-11-02
    • 2021-10-07
    • 2011-03-30
    • 1970-01-01
    相关资源
    最近更新 更多