这两个在 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
作为区块评估的最终结果。
我正在学习 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
作为区块评估的最终结果。