`将`proc命令注入模板体

时间:2016-03-21 16:03:50

标签: templates scope arguments nim

给出以下代码段:

template myProc(body: untyped) =
  template doStuff(stuffBody: untyped) = 
    proc doStuffArg(a: int) = stuffBody

  body

myProc:
  doStuff:
    echo a

doStuffArg(123)

只要在doStuff体内没有使用a,代码就会起作用。有没有办法让doStuff身体意识到这个论点?

1 个答案:

答案 0 :(得分:3)

在这个特定的例子中,两个模板都必须标记为脏,以防止重写AST,目的是制作模板hygienic

template myProc(body: untyped) {.dirty.} =
  template doStuff(stuffBody: untyped) {.dirty.} =
    proc doStuffArg(a: int) = stuffBody

  body

myProc:
  doStuff:
    echo a

doStuffArg(123)