rust 在匹配分支中使用宏

jw5wzhpr  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(94)

我有一个宏,它抽象了枚举的一个变体:

struct Test(u64);

enum MyEnum {
  Variant1(Test)
}

macro_rules! MyEnumVariant {
   ["1"] => MyEnum::Variant1
}

我想在匹配分支中使用:

fn main() {
  let t = MyEnum::Variant1(Test(3));

  match t {
    MyEnumVariant!["1"](test) => println!("Value of test is: {}", test.0)
  }
}

这会导致编译错误。我没有找到任何语法允许我使用宏来替换匹配中的变量访问。
这是一个playground link到这个小例子与编译错误。
您有允许在这里使用宏的语法吗?

3htmauhk

3htmauhk1#

使宏包含要生成的整个模式。这将编译:

macro_rules! MyEnumVariant {
    ["1" ( $p:pat )] => { MyEnum::Variant1($p) }
}
match t {
    MyEnumVariant!["1"(test)] => println!("Value of test is: {}", test.0)
}

相关问题