如何在 Nim 模板中获取 expr 的字符串表示形式
How to get string representation of an expr in Nim template
是否有可能在 template
中获取表达式(或标识符)的字符串表示形式?例如,有下一个代码:
template `*`*(name: expr) {.immediate.} =
var `name`* {.inject.}: string = ""
# Want to print 'name' here, not its value like with backticks
是否可以在模板中获取 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
输出将是:
the variable name is test
最新版本的编译器不鼓励使用 immediate
pragma。有关详细信息,请参阅以下答案:
是否有可能在 template
中获取表达式(或标识符)的字符串表示形式?例如,有下一个代码:
template `*`*(name: expr) {.immediate.} =
var `name`* {.inject.}: string = ""
# Want to print 'name' here, not its value like with backticks
是否可以在模板中获取 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
输出将是:
the variable name is test
最新版本的编译器不鼓励使用 immediate
pragma。有关详细信息,请参阅以下答案: