2016-11-24 3 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. Поэтому я не уверен, что это то, что вам нужно.