Macros Crystal lang:如何获取宏本身的位置,而不是宏参数。

Macros Crystal lang:如何获取宏本身的位置,而不是宏参数。,macros,crystal-lang,Macros,Crystal Lang,可以通过和其他方法获得ASTNode的位置 然而问题是,我们可以得到宏参数的节点,但不能得到宏本身。宏中的self之类的内容没有定义。问题可能是“如何获取宏本身的节点而不是参数”,但我想这是不可能的 但即使对于参数的位置,有些参数也只返回nil而不返回任何内容: macro xx(**args) {% p args.line_number %} # => nil end xx a: 123 对于NamedTupleLiteral和TupleLiteral,您会发现#line\u

可以通过和其他方法获得ASTNode的位置

然而问题是,我们可以得到宏参数的节点,但不能得到宏本身。宏中的
self
之类的内容没有定义。问题可能是“如何获取宏本身的节点而不是参数”,但我想这是不可能的

但即使对于参数的位置,有些参数也只返回
nil
而不返回任何内容:

macro xx(**args)
    {% p args.line_number %} # => nil
end
xx a: 123
对于
NamedTupleLiteral
TupleLiteral
,您会发现
#line\u number
#filename
和所有其他位置字段都是
nil
。这意味着像
xx
这样的宏永远无法获取代码位置?或者,只是我错过了什么


非常感谢。

反问:为什么需要宏定义的位置?这样做的用例是什么?我不确定您想要实现什么,但可能
\uuuu文件\uuuuu
\uu行\uuuu
常量会很有用。@JohannesMüller它出现在来自宏的错误消息中,就像您觉得它缺少文件问题和/或在邮件列表中出现一样:)