Nim 宏参数
Nim macro parameters
这是我要编译的代码:
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 的宏中获取我的变量值?
表达式是 untyped. Since you really want to get integers you can specify the parameter to be typed 然后这应该编译:
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
作为参数类型,除非您希望将其他类型也传递给宏中参数 kind 上的 case
。
默认情况下,宏将接收 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: 142
这是我要编译的代码:
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 的宏中获取我的变量值?
表达式是 untyped. Since you really want to get integers you can specify the parameter to be typed 然后这应该编译:
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
作为参数类型,除非您希望将其他类型也传递给宏中参数 kind 上的 case
。
默认情况下,宏将接收 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: 142