升级到 Sbt 0.13.8 但对于带美元符号的字符串收到了几个警告 "detected an interpolated expression"

Upgrade to Sbt 0.13.8 but got several warnings "detected an interpolated expression" for strings with dollar sign

我将我的应用程序升级为 Play 2.4 和 sbt 0.13.8。我们的代码中几乎没有包含字符串值(如“${fn}”)的字符串变量。然而,在升级到 sbt 0.13.8 之后,它开始显示这个警告:

possible missing interpolator: detected an interpolated expression
[warn]       var email = format.replace("${fn}", fn)
[warn]                                  ^ 

我已经尝试使用三重引号引起来的字符串,但警告仍然不会消失。

Scala 有一个标准的机制来替换字符串中 ${...} 之间的表达式。为了使这项工作有效,您必须在字符串前面加上 s。例如:

val fn = "someone@somewhere.com"
var email = s"${fn}" // email will be: "someone@somewhere.com"

Scala 或 sbt 发现您在字符串文字中使用了 ${...},但文字前面没有 s。它警告您,您可能忘记了添加 s.

这似乎是 compiler linter 产生的误报。您可以尝试删除 linter 编译器标志(在您的编译器标志中查找 -Xlint)或者您可以升级到 Scala 2.11.7 和 sbt 0.13.9 以查看是否拾取了误报修复。

如果你想保留 -Xlint(这通常是个好主意),你可以通过写 s"$${fn}".

来避免警告