是否有允许在给定上下文中应用字符串插值的宏f
?
@f("abc$x", x=3) == "abc3"
或者可能是函数g
g("abc\$x", x=3)
答案 0 :(得分:6)
您可以使用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
。所以我不确定这是否是你需要的。