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在模板中获取表达式的字符串表示形式?
您可以使用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