我有一个看起来像这样的宏
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)扩展。
解决这个问题的正确方法是什么?
答案 0 :(得分:1)
您可以插入wrap-screensaver-as-exe
:
@eval
但这感觉不对。你失去了它作为一个宏的所有权力:它不是在编译时扩展一次,而是在每次调用它时都会扩展。使用给定的函数,您应该使用宏来测试是否获得了很多。