使用下划线的Scala字符串插值

时间:2018-05-06 20:15:30

标签: 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"

这似乎有效:

s"$startDt$endDt"
res62: String = 2018040520180505

但这失败了:

s"$startDt_$endDt"
<console>:27: error: not found: value startDt_
       s"$startDt_$endDt"
          ^

我期望这个简单的解决方法可以使用转义,但不会产生预期的结果:

s"$startDt\\_$endDt"
res2: String = 20180405\_20180505

请注意,这个问题与Why can't _ be used inside of string interpolation?的不同之处在于,这个问题正在寻找一个可行的字符串插值解决方案,而前一个问题是更多内部的scala聚焦。

1 个答案:

答案 0 :(得分:2)

你可以明确地使用花括号:

@ s"${startDt}_${endDt}"
res11: String = "20180405_20180505"

您的代码:

s"$startDt_$endDt"

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