我试图理解Rust宏如何捕获工作并且正在查看nom解析器库。
位置nom/src/bytes.rs宣布宏tag!
与($i:expr, $tag: expr)
捕获。然而,在使用tag!
的地方,只使用一个参数,即tag!("+")
。示例:nom-lua52/op.rs。我读过有关宏的tutorials,但这个结构似乎很特别。
似乎输入$i
是以某种方式隐含的?
诀窍是tag!()
宏调用在value!
宏内部,它将与tag!
匹配并传递一个额外的参数。这在implementing tag!
文件中有描述。