rust 如何使用&和|宏规则模式中的符号

uujelgoq  于 2023-03-12  发布在  其他
关注(0)|答案(1)|浏览(115)

我试着写一个像这样的简单的宏,以便于编写代码

enum Term {
    Or(Box<Term>, Box<Term>),
    And(Box<Term>, Box<Term>),
    Value(u8),
}

macro_rules! term {
    ($value_1:expr & $value_2:expr) => {
        Term::And(Box::new($value_1), Box::new($value_2))
    };
    ($value_1:expr | $value_2: expr) => {
        Term::Or(Box::new($value_1), Box::new($value_2))
    };
    ($value: expr) => {
        Term::Value($value)
    };
}

但是,在我的模式中,我不能将&|放在expr之后。我尝试使用tt,但它不起作用,因为我并不总是将一个标记放在$value中。pat_param似乎也不适用于&
唯一可行的选择似乎是使用(($value_1:expr) & ($value_2:expr)),但如果我可以不使用额外的括号,那就更好了。
有什么办法吗?

h79rfbju

h79rfbju1#

不允许使用&以避免歧义,因此无法将&作为声明性宏中expr参数之后的直接标记。
exprstmt后面只能跟以下之一:=>,;中的任意一个。

相关问题