在字串巨集中實現插值

字串巨集沒有內建插值功能。但是,可以手動實現此功能。請注意,如果沒有轉義與周圍字串巨集具有相同分隔符的字串文字,則無法嵌入; 也就是說,儘管 """ $("x") """ 是可能的,但 " $("x") " 卻不是。相反,這必須作為 " $(\"x\") " 進行轉義。有關此限制的更多詳細資訊,請參閱備註部分。

手動實現插值有兩種方法:手動實現解析,或讓 Julia 進行解析。第一種方法更靈活,但第二種方法更容易。

手動解析

macro interp_str(s)
    components = []
    buf = IOBuffer(s)
    while !eof(buf)
        push!(components, rstrip(readuntil(buf, '$'), '$'))
        if !eof(buf)
            push!(components, parse(buf; greedy=false))
        end
    end
    quote
        string($(map(esc, components)...))
    end
end

朱莉婭解析

macro e_str(s)
    esc(parse("\"$(escape_string(s))\""))
end

這種方法轉義字串(但要注意 escape_string沒有轉義 $ 標誌),並把它回 Julia 的解析器來解析。轉義字串是必要的,以確保 "\不會影響字串的解析。得到的表示式是:string 表示式,可以檢查和分解以用於巨集觀目的。