rust - 我可以解开宏中的文字吗?
问题描述
我想制作一个执行此操作的宏
mac1!("foo", x)
发出
foo(x)
有可能吗?
解决方案
不,这是不可能的。到宏展开时,匹配是在"foo"
一个expression
(或一个literal
)的事实上完成的。编译器不会区分"foo"
示例中的表达式和123u8
, 1 + 2
,foo()
或者{ let f = fs::read("foo.txt"); ... }
因为所有这些都是表达式。所有的例子都知道第一个参数是任何类型的有效表达式,它不能深入研究它,因为编译器此时不知道“类型”或“值”是什么.
您可以使用过程宏,它可以使用参数的值来生成新的标记,包括标识符。