julia宏的隐式__source__参数不能在引用块内使用

时间:2019-09-13 14:56:36

标签: macros julia metaprogramming

我将从我的代码开始:

    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块返回的表达式在运行时求值。

我觉得必须有一种方法来捕获该变量并将其直接注入稍后将要求值的表达式中,但是我还没有弄清楚该怎么做。感谢您的帮助。如果有更好的方法,请告诉我。

1 个答案:

答案 0 :(得分:0)

我最终自己找到了答案。在第二行中,如果我将__source__更改为__source__.line__source__.file,只要我随后使用$将结果插入到返回的宏表达式中,它就可以正常工作。我仍然不确定为什么__source__本身不起作用,但是现在使用.line.file方法对我来说都是有效的。