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

Where does nom's "$i" macro argument come from?

我正在尝试了解 Rust 宏捕获的工作原理,并且正在查看 nom 解析器库。

位置 nom/src/bytes.rs 声明宏 tag!,用 ($i:expr, $tag: expr) 捕获。 然而,在使用 tag! 的所有地方,它只与一个参数一起使用,即 tag!("+")。 示例:nom-lua52/op.rs. I've read tutorials 关于宏,但是这个构造似乎很特殊。

输入 $i 似乎是 隐含的

诀窍是 tag!() 宏调用在 value! 宏内部,它将与 tag! 匹配并向其传递一个附加参数。这在文件 implementing tag!.

中有描述