我将从我的代码开始:
macro example(args...)
local s = __source__
println(s) # This part works, showing macro is called on line 9
quote
println(s) # Julia tells me this variable "s" is not defined
println(__source__) # Likewise, "__source__" is not defined here either
end
end
@example 42 # Line 9 of my file
在上面的宏中,我想记录调用该宏的行号,并在我的引用块中使用它。将其捕获在引号块外部的变量中并在内部使用它,或直接在引号块中使用它都不起作用。我的理解是quote块外部的代码在解析时运行,并且quote块返回的表达式在运行时求值。
我觉得必须有一种方法来捕获该变量并将其直接注入稍后将要求值的表达式中,但是我还没有弄清楚该怎么做。感谢您的帮助。如果有更好的方法,请告诉我。
答案 0 :(得分:0)
我最终自己找到了答案。在第二行中,如果我将__source__
更改为__source__.line
或__source__.file
,只要我随后使用$将结果插入到返回的宏表达式中,它就可以正常工作。我仍然不确定为什么__source__
本身不起作用,但是现在使用.line
或.file
方法对我来说都是有效的。