升级到 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}"
.
来避免警告
我将我的应用程序升级为 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}"
.