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)*) }; } }