When nimvm语句

nimvm 是一个特殊的符号,可以用作 when nimvm 语句的表达式来区分编译时和可执行文件之间的执行路径。

示例:

  1. proc someProcThatMayRunInCompileTime(): bool =
  2. when nimvm:
  3. # 编译时采用这个分支。
  4. result = true
  5. else:
  6. # 可执行文件中采用这个分支
  7. result = false
  8. const ctValue = someProcThatMayRunInCompileTime()
  9. let rtValue = someProcThatMayRunInCompileTime()
  10. assert(ctValue == true)
  11. assert(rtValue == false)

when nimvm 语句必须满足以下要求:

  • 它的表达式必须是 nimvm 。不允许更多的复杂表达式。
  • 它必须不含有 elif 分支。
  • 必须含有 else 分支。
  • 分支中的代码不得影响 when nimvm 语句后面的代码的语义。例如它不能定义后续代码中使用的符号。