什么';在打印集中,scala与这两个的区别是什么

什么';在打印集中,scala与这两个的区别是什么,scala,scala-collections,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”,然后打印结果?不是吗?在scalaa+=b中,将a=a+b分解为a。赋值表达式的类型为“单位”。因此,

我正在学习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分解为
a
。赋值表达式的类型为“单位”。因此,与C或Java不同,赋值表达式的结果不在左边,而是在单位值中。

在scala
a+=b
Desugars to
a=a+b
中。赋值表达式的类型为“单位”。因此,与C或Java不同,赋值表达式的结果不在左边,而是在单位值中。

正如@pedrofurla已经回答的那样,第二个打印显示赋值的结果,即用
()
表示的
单位

此外,请注意,我们可以打印计算以下由花括号分隔的块的结果

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

也就是说,将
“Tom”
添加到
集合
中作为第一个表达式,然后将更新后的
集合
作为块计算的最终结果进行传递。

正如@pedrofurla已经回答的那样,第二次打印显示赋值的计算结果,即用
()
表示的
单元

此外,请注意,我们可以打印计算以下由花括号分隔的块的结果

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

也就是说,将
“Tom”
添加到
集合
作为第一个表达式,然后将更新后的
集合
作为块计算的最终结果交付。

谢谢,这真的很有帮助,我真的很困惑,因为这与C完全不同。谢谢,这真的很有帮助,我真的很困惑,因为这与C完全不同。。