Julia宏扩展内部功能

时间:2018-04-18 06:57:13

标签: macros julia

我有一个看起来像这样的宏

macro multishift(L...)
    ex = :(0)
    for d in L
        ex =  :($ex | 1 << Int32($d))
    end
    return ex
end

因此@multishift(1,2)会扩展为0 | 1 << Int32(1) | 1 << Int32(2)。现在我添加一个这样的函数,并调用它:

f(L...) = @multishift(L...)
println(f(1,2))

这不会奏效。我得到一个L未定义的错误。我可以看到这里发生了什么 - 宏用L而不是元组(1,2)扩展。

解决这个问题的正确方法是什么?

1 个答案:

答案 0 :(得分:1)

您可以插入wrap-screensaver-as-exe

@eval

但这感觉不对。你失去了它作为一个宏的所有权力:它不是在编译时扩展一次,而是在每次调用它时都会扩展。使用给定的函数,您应该使用宏来测试是否获得了很多。