compileTime 编译指示
compileTime 编译指示用来指示一个过程或者变量只能用于编译期的执行。不会为它生成代码。 编译期过程可作为宏的辅助。从语言的 0.12.0 版本开始,包含 system.NimNode 类型的参数的过程隐式地声明为 compileTime:
proc astHelper(n: NimNode): NimNode =
result = n
与下面的代码一致:
proc astHelper(n: NimNode): NimNode {.compileTime.} =
result = n
加了 compileTime 编译指示的变量在运行时也存在。很多时候希望某些变量(例如查找表)在编译时填充数据、 在运行时访问——这轻而易举:
import std/macros
var nameToProc {.compileTime.}: seq[(string, proc (): string {.nimcall.})]
macro registerProc(p: untyped): untyped =
result = newTree(nnkStmtList, p)
let procName = p[0]
let procNameAsStr = $p[0]
result.add quote do:
nameToProc.add((`procNameAsStr`, `procName`))
proc foo: string {.registerProc.} = "foo"
proc bar: string {.registerProc.} = "bar"
proc baz: string {.registerProc.} = "baz"
doAssert nameToProc[2][1]() == "baz"
当前内容版权归 vectorworkshopbaoerjie 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 vectorworkshopbaoerjie .