如何将 +、- 等传递给 Nim 中的宏
how to pass +, -, etc. to macro in Nim
我想在 Nim 中做类似这个宏的事情
#define BINARY_OP(op) \
do { \
double left = getLast(); \
double right = getLast(); \
push(right op left); \
} while (false)
我试过这样做:
macro binaryOp(op: untyped) =
let right = getLast()
let left = getLast()
vm.push(left op right)
但是编译器报错:
Error: attempting to call routine: 'op'
我该如何解决这个问题?
更新
我想像这样使用宏:
binaryop(+)
Nim 宏不像 C 宏,它们是接收源代码的代码生成器。你想要的是一个模板,它类似于 C 宏,但更复杂。
template binaryOp(op: untyped) =
let right = 10
let left = 20
echo op(left, right)
binaryOp(`+`)
在这种情况下,您需要使用反引号在词法上使用 +
,here 解释道。
我想在 Nim 中做类似这个宏的事情
#define BINARY_OP(op) \
do { \
double left = getLast(); \
double right = getLast(); \
push(right op left); \
} while (false)
我试过这样做:
macro binaryOp(op: untyped) =
let right = getLast()
let left = getLast()
vm.push(left op right)
但是编译器报错:
Error: attempting to call routine: 'op'
我该如何解决这个问题?
更新
我想像这样使用宏:
binaryop(+)
Nim 宏不像 C 宏,它们是接收源代码的代码生成器。你想要的是一个模板,它类似于 C 宏,但更复杂。
template binaryOp(op: untyped) =
let right = 10
let left = 20
echo op(left, right)
binaryOp(`+`)
在这种情况下,您需要使用反引号在词法上使用 +
,here 解释道。