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

Paw*_*elN 1 scala string-interpolation

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

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

我的疑问是我们是否应该评估内插字符串中的表达式。我看到很多其他开发人员正在使用此功能的 Scala 代码,例如示例中,但不知道这是否正确和安全。

Gab*_*lla 5

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

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

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

    other values 1
    other values 2
    ...
    other values 100
    Hello World! ()
    
    Run Code Online (Sandbox Code Playgroud)

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

我会为自己(和我的同事)省去巨大的头痛,然后就去做

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