【问题标题】:Scala String Interpolation with Underscore带有下划线的 Scala 字符串插值
【发布时间】:2018-05-06 20:15:29
【问题描述】:

我是 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}"
  • @RamanMishra 我不认为这是该问题的重复。这个问题是关于使用 _ 匿名占位符参数。这是关于在 $ 变量的末尾粉碎 _ 并查找另一个。

标签: scala string-interpolation scala-2.11 apache-spark-2.2


【解决方案1】:

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

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

您的代码:

s"$startDt_$endDt"

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

【讨论】:

  • 是的,这会编译但不会产生所需的结果:val startDt_ = "20180405" val endDt = "20180505" s"$startDt_$endDt" res13: String = 2018040520180505
  • @user9074332 是的,因为在这种情况下,_ 是变量名的一部分,但您需要在字符串中使用文字 _ 字符。
  • @user9074332 我的意思是“这就是错误的含义”(它正在查找变量startDt_)。 :)
猜你喜欢
  • 2014-11-02
  • 2019-04-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多