【发布时间】:2021-03-28 22:24:57
【问题描述】:
我正在尝试在 nim 中执行与 Python 中的 eval 方法等效的操作。
我的印象是 macros 包中的 parseStmt 应该可以帮助我解决这个问题,但我遇到了一个我不明白的编译问题。
import macros
echo parseStmt("1 + 2")
我本以为它会在执行时打印3,但编译却抱怨
Error: request to generate code for .compileTime proc: $
我找到了this thread,并且那里的示例可以正常工作,然后,我能够制作出以下程序,可以按我的预期工作:
import macros
import strformat
macro eval(value: string): untyped =
result = parseStmt fmt"{value}"
echo eval("1+2")
但我完全不明白为什么它需要以这种方式编写。如果我内联语句 let value = "1 + 2"; echo parseStmt fmt"{value}",我会得到与上面相同的编译错误。
另外,在上面的eval 宏的上下文中,为什么parseStmt value 与parseStmt fmt"{value}" 不同?
我在这里错过了什么?
提前感谢您的澄清!
【问题讨论】:
标签: macros metaprogramming nim-lang