给出以下代码段:
template myProc(body: untyped) =
template doStuff(stuffBody: untyped) =
proc doStuffArg(a: int) = stuffBody
body
myProc:
doStuff:
echo a
doStuffArg(123)
只要在doStuff体内没有使用a
,代码就会起作用。有没有办法让doStuff
身体意识到这个论点?
答案 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)