带下划线的 Scala 字符串插值

use*_*332 3 scala string-interpolation scala-2.11 apache-spark-2.2

我是 Scala 的新手,所以请随时为我指出文档的方向,但我无法在我的研究中找到这个问题的答案。

我将scala 2.11.8 与 Spark2.2 一起使用并尝试使用插值创建一个包含 dateString1_dateString2(带下划线)的动态字符串,但存在一些问题。

val startDt = "20180405" 
val endDt = "20180505"
Run Code Online (Sandbox Code Playgroud)

这似乎有效:

s"$startDt$endDt"
res62: String = 2018040520180505
Run Code Online (Sandbox Code Playgroud)

但这失败了:

s"$startDt_$endDt"
<console>:27: error: not found: value startDt_
       s"$startDt_$endDt"
          ^
Run Code Online (Sandbox Code Playgroud)

我希望这个带有转义的简单解决方法可以工作,但不会产生预期的结果:

s"$startDt\\_$endDt"
res2: String = 20180405\_20180505
Run Code Online (Sandbox Code Playgroud)

请注意,这个问题不同于Why can't _ be used inside of string interpolation? 因为这个问题希望找到一个可行的字符串插值解决方案,而上一个问题则更侧重于 Scala 内部。

And*_*den 7

您可以使用花括号明确表示:

@ s"${startDt}_${endDt}"
res11: String = "20180405_20180505"
Run Code Online (Sandbox Code Playgroud)

您的代码:

s"$startDt_$endDt"
Run Code Online (Sandbox Code Playgroud)

失败,因为它startDt_是一个有效的标识符,并且 scala 尝试插入该不存在的变量。