作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想使用 nim 访问完整模块(文件)的 AST。我发现,任何宏都可以用作自定义编译指示,所以我在文件 foo.nim 中做了这样的事情:
import macros
macro getAst(ast: untyped): untyped =
echo "ast = ", treeRepr(ast)
{.getAst.} # <-- This should invoke the getAst() macro with the AST of the file
proc hello() =
echo "hello world"
但我得到编译器错误
cannot attach a custom pragma to 'foo'
有没有办法做到这一点?我发现我可以像这样将宏用作 block 宏,但我真的更喜欢通过 pragma 使用它。
getAst:
proc hello() =
echo "hello world"
最佳答案
无法将自定义编译指示附加到文件,但您可以这样做
proc hello() {.getAst.} =
echo "hello world"
将编译指示附加到 proc。我不确定,但好像
{.push.}
不适用于宏,仅适用于
template
编译指示,像这样:
template dbIgnore {.pragma.}
{.push dbIgnore.}
所以你最好的选择是用 pragma 注释你想要的所有 procs。
关于macros - nim - 自定义宏/pragma 以获取完整模块但获取 "cannot attach a custom pragma",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65519270/
我是一名优秀的程序员,十分优秀!