如何在给定的上下文中进行字符串插值?

时间:2016-11-24 17:16:34

标签: julia

是否有允许在给定上下文中应用字符串插值的宏f

@f("abc$x", x=3) == "abc3"

或者可能是函数g

g("abc\$x", x=3)

1 个答案:

答案 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。所以我不确定这是否是你需要的。