String 带函数的字符串插值

String 带函数的字符串插值,string,julia,String,Julia,我想知道为什么julia中的字符串插值对f1这样的函数有效,但在下面的示例中对findall无效。有没有一种方法可以将findall这样的函数与字符串插值一起使用 f1 = function(x, y) x + y end "1 + 4 = $(f1(1, 4))" findall(r"a", "abca") "x: $(findall(r\"a\", \"abca\"))"

我想知道为什么julia中的字符串插值对
f1
这样的函数有效,但在下面的示例中对
findall
无效。有没有一种方法可以将
findall
这样的函数与字符串插值一起使用

f1 = function(x, y) x + y end
"1 + 4 = $(f1(1, 4))"

findall(r"a", "abca")

"x: $(findall(r\"a\", \"abca\"))"  # failed


我使用的是Julia 1.6.1。

经过一些试验后,这似乎是可行的。但我仍然不明白为什么它会以双引号失败

"""x: $(findall(r"a", "abca"))"""

$(…)内的字符串插值中
您可以编写常规的Julia代码,无需像原始示例中那样转义
等。只需插入完全相同的表达式:

julia> findall(r"a", "abca")
2-element Vector{UnitRange{Int64}}:
 1:1
 4:4

julia> "x: $(findall(r"a", "abca"))"
"x: UnitRange{Int64}[1:1, 4:4]"

哇,这太简单了。这对我来说仍然很难理解。似乎julia在遇到
$
符号时会先进行插值,然后完成字符串的构造?如果是这样,这无法解释为什么三引号有效。或者因为它会自动转义
$()
?这里的单四分之一和三分之一没有区别,所以我不太确定你在问什么。