升级到 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 以查看误报修复是否被拾取。

【讨论】:

我升级到 sbt 0.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 但收到几个警告“检测到带有美元符号的字符串的插值表达式”的主要内容,如果未能解决你的问题,请参考以下文章

升级到 Xcode 4 后出现缺少文件警告

sbt 0.13.8 URI 有一个权限组件

播放升级到 2.4 但无法获取 sbt-plugin

为啥调试时会收到“检测到 LoaderLock”警告?

使用 -Xfatal-warnings 但忽略弃用警告/使用 SBT 的自定义报告器

Sbt-assembly 未解决的依赖,Scala