Scala 为什么字符串插值在这种情况下不起作用?

Scala 为什么字符串插值在这种情况下不起作用?,scala,Scala,以下插值字符串有什么问题?编译器抱怨找不到符号str: private def colorGreen(str: String) = s"\u001B[32m$str\u001B[0m" // does not work private def colorGreen(str: String) = s"\u001B[32m${str}\u001B[0m" // works 显然,Scala字符串插值器会自动将unicode追加到s“\u001B[32m$str\u001B[0m”(即使它的意思是)

以下插值字符串有什么问题?编译器抱怨找不到符号
str

private def colorGreen(str: String) = s"\u001B[32m$str\u001B[0m" // does not work
private def colorGreen(str: String) = s"\u001B[32m${str}\u001B[0m" // works

显然,Scala字符串插值器会自动将unicode追加到
s“\u001B[32m$str\u001B[0m”
(即使它的意思是
)中。因此,它会查找名为
str\u001B
的变量

原则上,您可以使用以下插值:

private def colorGreen(str\u001B: String) = s"\u001B[32m$str\u001B[0m"

那一定是个bug,对吧?线索是你的反勾号是不必要的。这是因为
字符.isIdentifierIgnorable
没有被忽略。规范没有说你可以在“普通id”中嵌入零.但是我知道什么呢。对,我们不需要反勾号来将其解析为标识符。但是它与字符串插值行为相当一致,不是吗?有一些旧的java错误来澄清这种行为(不可忽略的东西不会被忽略).我不确定Scala规范是否准确或清楚地涵盖了它,但澄清的是,不管isUnicodeIdentifierPart怎么说。