P.MAC.DCL.02 在编写多个宏规则时,应该先从匹配粒度最小的开始写

【描述】

因为声明宏中,是按规则的编写顺序来匹配的。当第一个规则被匹配到,后面的规则将永远不会匹配到。所以,编写声明宏规则时,需要先写匹配粒度最小的,最具体的规则,然后逐步编写匹配范围更广泛的规则。

【正例】


#![allow(unused)]
fn main() {
#[macro_export]
macro_rules! foo {
    (@as_expr $e:expr) => {$e}; // expr 比 tt 匹配更加具体

    ($($tts:tt)*) => {
        foo!(@as_expr $($tts)*)
    };
}
}