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