这两个在 scala in print Set 中有什么区别

What's difference with these two in scala in print Set

我正在学习 Scala 编程语言,对此感到困惑:

var set = Set("hello", "world")

set += "Tom"
println(set)

println(set += "Tom")

第一次打印会输出

Set(hello, world, Tom)

但是第二个会输出

()

所以,为什么它们不同,我认为println(set += "Tom")会先做,set += "Tom",然后打印它的结果?不是吗?

在 scala a += b 中脱糖到 a = a + b。赋值表达式的类型是Unit。因此,与 C 或 Java 不同,赋值表达式的结果不是左侧而是单位值。

正如@pedrofurla 已经回答的那样,第二个打印显示评估分配的结果,即用 () 表示的 Unit

此外,请注意,我们可以打印评估以下由大括号分隔的块的结果,

println( {set += "Tom" ; set} )
Set(hello, world, Tom)

即把"Tom"添加到set作为第一个表达式,然后将更新后的set作为区块评估的最终结果。