传递 Rust 的所有权

问题描述 投票:0回答:1

我目前正在学习 rust 中的所有权和借用,以及如何在没有借用的情况下使用同一个变量执行函数两次,就像本例中无法编译的情况

enum Computer{
    Desktop,
    Laptop,
}

fn print_type_of_computer(num: Computer){
    match num {
        Computer::Desktop => println!("this is a desktop"),
        Computer::Laptop => println!("this is a laptop"),
    }
}

fn main() {
    let myComputer :Computer = Computer::Laptop;
    print_type_of_computer(myComputer);
    print_type_of_computer(myComputer);
}

但是,当我尝试这段代码时,即使没有借用,它也能正常工作

fn get_double(num: i32){
    println!("{:?}", num * 2);
}

fn main() {
    let mynum :i32 = 3;
    get_double(mynum);
    get_double(mynum);
}

我希望有人可以解释为什么代码在第一种情况下不被接受,但在第二种情况下被接受

rust ownership
1个回答
0
投票

i32
实现了
Copy
,因此在这种情况下,数据实际上被复制到函数中。这意味着传递的是该数据的副本,而不是借用传递到
get_double
的原始数据。

Computer
虽然没有实现
Copy
,所以必须借用。

© www.soinside.com 2019 - 2024. All rights reserved.