Scala 字符串插值和求值表达式

Scala string interpolation and evaluate expression

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

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

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

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

有两件事本质上是错误的:

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

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

其中()是for-comprehension的return值,即Unit.

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

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