首页 > 解决方案 > 我可以解开宏中的文字吗?

问题描述

我想制作一个执行此操作的宏

mac1!("foo", x)

发出

foo(x)

有可能吗?

标签: rust

解决方案


不,这是不可能的。到宏展开时,匹配是在"foo"一个expression(或一个literal)的事实上完成的。编译器不会区分"foo"示例中的表达式和123u8, 1 + 2,foo()或者{ let f = fs::read("foo.txt"); ... }因为所有这些都是表达式。所有的例子都知道第一个参数是任何类型的有效表达式,它不能深入研究它,因为编译器此时不知道“类型”或“值”是什么.

您可以使用过程宏,它可以使用参数的值来生成新的标记,包括标识符。


推荐阅读