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=1に発呼者の範囲にxを参照するであろう機能に差。だから私はこれがあなたが必要とするものかどうかは分かりません。

関連する問題