Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 如何在不复制一对借用值的情况下使用match?_Rust - Fatal编程技术网

Rust 如何在不复制一对借用值的情况下使用match?

Rust 如何在不复制一对借用值的情况下使用match?,rust,Rust,我将问题归结为以下代码: enum E { E1, } fn f(e1: &E, e2: &E) { match *e1 { E::E1 => (), } match (*e1, *e2) { (E::E1, E::E1) => (), } } fn main() {} 第一个匹配项可以,但第二个匹配项无法编译: 错误[E0507]:无法移出借用的内容 -->src/main.rs:9:12

我将问题归结为以下代码:

enum E {
    E1,
}

fn f(e1: &E, e2: &E) {
    match *e1 {
        E::E1 => (),
    }
    match (*e1, *e2) {
        (E::E1, E::E1) => (),
    }
}

fn main() {}
第一个匹配项可以,但第二个匹配项无法编译:

错误[E0507]:无法移出借用的内容
-->src/main.rs:9:12
|
9 |匹配(*e1,*e2){
|^^^无法移出借用的内容
错误[E0507]:无法移出借用的内容
-->src/main.rs:9:17
|
9 |匹配(*e1,*e2){
|^^^无法移出借用的内容

这似乎是因为我正在构造一对借用的东西,Rust试图将
e1
e2
移入其中。我发现,如果我在枚举之前添加“#[derivate(Copy,Clone)],我的代码就会编译。

可以通过从变量中删除去引用操作符来匹配两个引用的元组:

enum E {
    E1,
}

fn f(e1: &E, e2: &E) {
    match *e1 {
        E::E1 => (),
    }
    match (e1, e2) {
        (&E::E1, &E::E1) => (),
    }
}

通过从变量中删除取消引用运算符,可以在两个引用的元组上进行匹配:

enum E {
    E1,
}

fn f(e1: &E, e2: &E) {
    match *e1 {
        E::E1 => (),
    }
    match (e1, e2) {
        (&E::E1, &E::E1) => (),
    }
}