2016-11-24 12 views

回答

5

可以引入一個let塊新的上下文。這裏是做了宏:

macro f(s, args...) 
    args = [:($(esc(a.args[1])) = $(esc(a.args[2]))) for a in args] 
    quote 
     let $(args...) 
      $(esc(s)) 
     end 
    end 
end 

z = 5 
x = 1 


@f("abc$x, $(2y), $z", x=3, y = 2x) 
# "abc3, 12, 5" 

注意區別的函數,其中y = 2x將參考x在調用者的範圍,即以x=1。所以我不確定這是否是你需要的。

相關問題