nom的“ $ i”宏参数从何而来?

Kon*_*ele 5 macros rust nom

我试图了解Rust宏如何捕获工作,并正在查看nom解析器库。

位置nom / src / bytes.rs声明tag!使用捕获的宏($i:expr, $tag: expr)。但是,在使用的所有地方,tag!它仅使用一个参数,即tag!("+")。例如:NOM-lua52 / op.rs。我已经阅读了有关宏的教程,但是这种结构似乎很特殊。

似乎输入$i是某种隐式的

sta*_*lue 6

诀窍是tag!()宏调用位于value!宏内部,它将tag!与之匹配并向其传递附加参数。文件实现中tag!对此进行了描述。