如何在不复制它们的情况下对一对借来的值使用匹配?

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

我将我的问题减少到以下代码:

enum E {
    E1,
}

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

fn main() {}

第一场比赛没问题,但第二场比赛无法编译:

error[E0507]: cannot move out of borrowed content
 --> src/main.rs:9:12
  |
9 |     match (*e1, *e2) {
  |            ^^^ cannot move out of borrowed content

error[E0507]: cannot move out of borrowed content
 --> src/main.rs:9:17
  |
9 |     match (*e1, *e2) {
  |                 ^^^ cannot move out of borrowed content

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

rust
1个回答
5
投票

您可以通过从变量中删除取消引用运算符来匹配两个引用的元组:

enum E {
    E1,
}

fn f(e1: &E, e2: &E) {
    match *e1 {
        E::E1 => (),
    }
    match (e1, e2) {
        (&E::E1, &E::E1) => (),
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.