下面是我想编译的代码:
macro defineSomething(amount:expr):stmt=
var amountInt = intVal(amount).int
# Boring staff
defineSomething(42);它工作得很完美。我的宏里有我想要的东西,我可以用我自己的方式操作员工。
但我认为,最好将魔术数字移除到某些const设置中:
const MAGIC_AMOUNT:int = 42
# Whole lot of strings
defineSomething(MAGIC_AMOUNT)这个代码失败了。因为MAGIC_AMOUNT实际上不是整数值,不像42幻数。
那么,如何在nim宏中获取我的变量值呢?
发布于 2015-07-07 20:42:37
表达式是非类型。由于您确实希望获得整数,所以可以指定参数为打字,然后应该编译:
import macros
macro defineSomething(amount: typed):stmt=
echo getType(amount)
var amountInt = intVal(amount).int
echo "Hey ", amount_int
const MAGIC_AMOUNT = 42
defineSomething(43)
defineSomething(MAGIC_AMOUNT)或者只使用普通的int作为参数类型,除非您希望将其他类型也传递给宏中参数的仁爱上的case。
发布于 2015-07-08 16:54:02
默认情况下,宏将接收AST表达式而不是值。如果宏需要处理具体值,则需要使用静态参数:
macro defineSomething(amount: static[int]): stmt=
echo "int value: ", amount + 100
const MAGIC_AMOUNT = 42
defineSomething(43)
defineSomething(MAGIC_AMOUNT)这将在编译时打印:
int value: 143
int value: 142https://stackoverflow.com/questions/31269770
复制相似问题