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

col*_*ang 4 julia

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

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

或者也许是一个功能 g

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

tim*_*tim 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"
Run Code Online (Sandbox Code Playgroud)

注意函数的区别,其中y = 2xx在调用者的范围内引用,即to x=1.所以我不确定这是否是你需要的.