如何在Nim模板中获取expr的字符串表示形式

Ros*_*nko 2 generic-programming nim-lang

是否有可能在一个表达式中获取表达式(或标识符)的字符串表示template?例如,拥有下一个代码:

template `*`*(name: expr) {.immediate.} =
  var `name`* {.inject.}: string = ""
  # Want to print 'name' here, not its value like with backticks
Run Code Online (Sandbox Code Playgroud)

是否可以name在模板中获取表达式的字符串表示形式?

zah*_*zah 5

您可以使用astToStr系统模块中的魔术来执行此操作:

template foo*(name: untyped) =
  var `name`* {.inject.}: string = ""
  # Want to print 'name' here, not its value like with backticks
  echo "the variable name is ", name.astToStr

foo test
Run Code Online (Sandbox Code Playgroud)

输出将是:

the variable name is test
Run Code Online (Sandbox Code Playgroud)

immediate不鼓励使用最新版本的编译器来使用pragma.有关更多详细信息,请参阅以下答案: typed vs untyped vs expr vs stmt in templates and macros