Rust 如何根据封装字符串的枚举变量进行模式匹配?

Rust 如何根据封装字符串的枚举变量进行模式匹配?,rust,pattern-matching,Rust,Pattern Matching,我有一个枚举: enum T { A(String), } 我想匹配此枚举的变量,但此代码无效: match t { T::A("a") => println!("a"), T::A("b") => println!("b"), _ => println!("something else"), } 我知道我可以做到这一点,但在我看来,这太冗长了: match t { T::A(value) => match value.as_r

我有一个枚举:

enum T {
    A(String),
}
我想匹配此枚举的变量,但此代码无效:

match t {
    T::A("a") => println!("a"),
    T::A("b") => println!("b"),
    _ => println!("something else"),
}
我知道我可以做到这一点,但在我看来,这太冗长了:

match t {
    T::A(value) => match value.as_ref() {
        "a" => println!("a"),
        "b" => println!("b"),
        _ => println!("something else"),
    },
}

有没有一种较短的方法可以做到这一点?

我认为唯一的另一种方法是使用,但这与使用嵌套匹配的版本一样冗长

match t {
    T::A(ref value) if value == "a" => println!("a"),
    T::A(ref value) if value == "b" => println!("b"),
    _ => println!("something else"),
}
您还可以通过创建一个具有
&str
而不是
字符串的并行枚举来“转换”您的问题,但大多数人不喜欢这种解决方案。