如何在没有嵌套匹配的情况下对枚举字段内的Vec <T>进行模式匹配?

oli*_*obk 4 enums pattern-matching rust

模式匹配一个Vec<T>可以通过使用来完成&v[..]v.as_slice().

let x = vec![1, 2, 3];
match &x[..] {
    [] => println!("empty"),
    [_] => println!("one"),
    [..] => println!("many"),
}
Run Code Online (Sandbox Code Playgroud)

如果我有一个包含Vec我要匹配的字段的枚举,我需要在外部匹配臂内创建一个嵌套匹配:

enum Test {
    Many(Vec<u8>),
    Text(String),
}

fn main() {
    let x = Test::Many(vec![1, 2, 3]);
    match x {
        Test::Text(s) => println!("{}", s),
        Test::Many(v) => match &v[..] {
            [] => println!("empty"),
            [_] => println!("one"),
            [..] => println!("many"),
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够做的是直接匹配Vec以下示例中的as:

match x {
    Test::Text(s) => println!("{}", s),
    Test::Many([]) => println!("empty"),
    Test::Many([_]) => println!("one"),
    Test::Many([..]) => println!("many"),
}
Run Code Online (Sandbox Code Playgroud)

我猜在独特的载体被删除之前可能吗?或者我错过了一些ref可以解决这个问题的魔法?

huo*_*uon 5

不幸的是,不可能直接这样做.然而,希望可能添加" Deref模式",这将允许通过实现Deref或者DerefMut例如可以在T内部a Box<T>或在[T]"内部"a 上匹配的任何类型进行模式匹配Vec<T>.