在print Set中scala与这两个有什么不同

时间:2015-12-05 19:53:26

标签: scala scala-collections

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

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

set += "Tom"
println(set)

println(set += "Tom")

第一次打印将输出

Set(hello, world, Tom)

但第二个会输出

()

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

2 个答案:

答案 0 :(得分:5)

scala a += b dessugars to a = a + b。赋值表达式的类型是Unit。因此,与C或Java不同,赋值表达式的结果不会导致左侧但是单位值。

答案 1 :(得分:1)

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

另外,请注意,我们可以打印评估由大括号

分隔的以下块的结果
println( {set += "Tom" ; set} )
Set(hello, world, Tom)

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