升级到 Sbt 0.13.8 但收到几个警告“检测到带有美元符号的字符串的插值表达式”
Posted
技术标签:
【中文标题】升级到 Sbt 0.13.8 但收到几个警告“检测到带有美元符号的字符串的插值表达式”【英文标题】:Upgrade to Sbt 0.13.8 but got several warnings "detected an interpolated expression" for strings with dollar sign 【发布时间】:2015-11-24 19:02:29 【问题描述】:我将我的应用升级为 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] ^
我已尝试使用三引号字符串,但警告仍然不会消失。
【问题讨论】:
【参考方案1】:如果你想保留-Xlint
(这通常是个好主意),你可以写s"$$fn"
来避免警告。
【讨论】:
【参考方案2】:这似乎是由compiler linter 生成的误报。您可以尝试删除 linter 编译器标志(在您的编译器标志中查找 -Xlint
),或者您可以升级到 Scala 2.11.7 和 sbt 0.13.9 以查看误报修复是否被拾取。
【讨论】:
我升级到 sbt0.13.9
和 scala 2.11.7
但它仍然无法正常工作。
哦。我从 build.sbt 中删除了-Xlint
,它现在可以工作了。谢谢。【参考方案3】:
Scala 有一个标准机制来替换字符串中$...
之间的表达式。要完成这项工作,您必须在字符串前面加上s
。例如:
val fn = "someone@somewhere.com"
var email = s"$fn" // email will be: "someone@somewhere.com"
Scala 或 sbt 发现您在字符串文字中使用了 $...
,但文字前面没有 s
。它警告您,您可能忘记在前面加上 s
。
【讨论】:
Jesper,这个字符串文字 "$fn" 是我们系统中的字符串文字,我们希望 Scala 将其视为普通字符串文字而不是插值字符串。 我只是在解释您收到警告的原因 - 因为您就是这么问的。以上是关于升级到 Sbt 0.13.8 但收到几个警告“检测到带有美元符号的字符串的插值表达式”的主要内容,如果未能解决你的问题,请参考以下文章