如何将 +、- 等传递给 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 解释道。