我目前正在学习 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);
}
我希望有人可以解释为什么代码在第一种情况下不被接受,但在第二种情况下被接受
i32
实现了 Copy
,因此在这种情况下,数据实际上被复制到函数中。这意味着传递的是该数据的副本,而不是借用传递到 get_double
的原始数据。
Computer
虽然没有实现Copy
,所以必须借用。