Scala字符串插值和评估表达式

时间:2016-11-29 10:05:48

标签: scala string-interpolation

我正在深入研究Scala的字符串插值功能,我想知道它是否安全使用它。字符串插值允许我们评估表达式,如:

println(s"Hello World! ${for (i <- 1 to 100) println(s"other values $i")}")

我怀疑是否应该在插值字符串中计算表达式。我看到很多Scala代码,其他开发人员正在使用此功能,例如,并不知道这是否正确和安全。

1 个答案:

答案 0 :(得分:4)

我永远不会使用它,我不希望我的同事使用它。

基本上有两件事情是关闭的:

  • 字符串插值是一个很好的功能,因为它使值的连接易于阅读...除非你在那里粘贴整个scala程序:)
  • 不仅那里有复杂的表达式,而且你还在使用副作用,因此在评估插值过程中会打印100个值。所以你得到了

    other values 1
    other values 2
    ...
    other values 100
    Hello World! ()
    

()是for-comprehension的返回值,即Unit

我会为自己(以及我的同事们)带来巨大的麻烦而且只是做着

println(s"Hello World!")
for (i <- 1 to 100) {
  println(s"other values $i")
}