带下划线的 Scala 字符串插值

标签 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的内部。

最佳答案

您可以使用大括号显式显示:

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

您的代码:

s"$startDt_$endDt"

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

关于带下划线的 Scala 字符串插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50204130/

相关文章:

Scalaz 未装箱标记类型不会自动拆箱

scala spec2 我无法创建同时使用 must be_== 和 failure 的测试

string - 如何用scala中的其他文本替换字符串中的文本

arrays - Scala 分配顺序索引数组

scala - 通过一些方法初始化Scala Object中的变量(类似于类中的init方法)

Scala 使用接受鸭子类型(duck typing)参数的类创建实例

c# - 使用 String.Format 创建正则表达式

Python str.format 的 R 等效项

scala - 是否可以在 Scala 中为字符串插值指定类型参数

java - 如何采用 TDD 并确保遵守?