Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 使用SBT编译时,Scala字符串不能为'${foo.bar}';?_String_Scala_Sbt - Fatal编程技术网

String 使用SBT编译时,Scala字符串不能为'${foo.bar}';?

String 使用SBT编译时,Scala字符串不能为'${foo.bar}';?,string,scala,sbt,String,Scala,Sbt,我希望Scala字符串是${foo.bar}(字面意思是,用于稍后测试一些变量替换)。 我试过: 所有给定编译错误,如错误:(19,15)可能缺少插值器:检测到插值表达式或无效转义字符 这不是一个关于字符串插值(或变量替换)的问题,它通常不会出现问题。启动scalarepl(scala2.11.3,java1.8)可以正常工作。某个地方一定有一个SBT a设置(除了-Xlint或隐藏的Xlint)明显导致了这种行为(来自命令行和IntelliJ)。\$和\{是无效的转义字符,不会编译。其他版本在

我希望Scala字符串是
${foo.bar}
(字面意思是,用于稍后测试一些变量替换)。 我试过:

所有给定编译错误,如
错误:(19,15)可能缺少插值器:检测到插值表达式
无效转义字符


这不是一个关于字符串插值(或变量替换)的问题,它通常不会出现问题。启动scalarepl(scala2.11.3,java1.8)可以正常工作。某个地方一定有一个SBT a设置(除了-Xlint或隐藏的Xlint)明显导致了这种行为(来自命令行和IntelliJ)。

\$
\{
是无效的转义字符,不会编译。其他版本在
2.12.6
上编译得很好,尽管早期版本中可能存在问题。

s或
f
插值器将发出一个常量:

$ scala -Xlint
Welcome to Scala 2.12.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_144).
Type in expressions for evaluation. Or try :help.

scala> "${foo.bar}"
<console>:12: warning: possible missing interpolator: detected an interpolated expression
       "${foo.bar}"
       ^
res0: String = ${foo.bar}

scala> f"$${foo.bar}"
res1: String = ${foo.bar}
$scala-Xlint
欢迎使用Scala 2.12.6(Java热点(TM)64位服务器虚拟机,Java 1.8.0_144)。
键入要计算的表达式。或尝试:help。
scala>“${foo.bar}”
:12:警告:可能缺少插值器:检测到插值表达式
“${foo.bar}”
^
res0:String=${foo.bar}
scala>f“$${foo.bar}”
res1:String=${foo.bar}

通常使用
-Xfatal warnings
将警告转换为错误。IntelliJ在源位置将其报告为错误,而scalac将其报告为警告,但带有一条摘要错误消息,该消息将导致生成失败。

前两个示例对我来说效果很好……带反斜杠的示例失败,因为
\$
\{
确实无效。
$$
也有效(但会产生两个美元符号)。OP的可能副本表示它生成了一个错误,而这只会生成一个警告,并且只有在打开这些警告的情况下才会生成。我怀疑还有其他原因。我目前认为这是与sbt设置的斗争(可能还有团队策略)。感谢您的回答,这将进一步帮助我。@Tim IntelliJ将
-Xlint-Xfatal warnings
转换为错误消息,如操作中所示。scalac将发出警告,然后是摘要错误消息。因此我认为这只是IntelliJ配置。但消息的来源是scalac的linter。
$ scala -Xlint
Welcome to Scala 2.12.6 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_144).
Type in expressions for evaluation. Or try :help.

scala> "${foo.bar}"
<console>:12: warning: possible missing interpolator: detected an interpolated expression
       "${foo.bar}"
       ^
res0: String = ${foo.bar}

scala> f"$${foo.bar}"
res1: String = ${foo.bar}