不可变集合上的+ =运算符

时间:2011-10-10 10:30:08

标签: scala

当我这样做时:

var airlines = Set("Qantas", "JetStar", "Air NZ")
airlines += "Virgin"

航空公司是一个不可改变的集合。

+=未在不可变的Set trait上定义。

scala中的内置运算符是+=吗?我的意思是scala如何知道用新的set("Qantas", "JetStar", "Air NZ", "Virgin")重新分配航空公司?

2 个答案:

答案 0 :(得分:14)

如果使用以=结尾的运算符(例如+=)但未在类上定义,则Scala编译器会将其解析为例如。

airlines = airlines + "Virgin"

或者,对于++=,我们有

airlines ++= airlines
去了

airlines = airlines ++ airlines

当然,作为dmeister notes,只有在新表达式有意义时才会编译。例如,如果我们处理var s。

Scala Reference §6.12.4 Assignment Operators
<=>=!=被排除在特殊情况之外,模式也从=开始。)

答案 1 :(得分:3)

+=运算符创建一个包含"Virgin"的新不可变集,并将新集分配给airlines变量。严格来说,现有的设置对象没有改变,但是该集合反对了航空公司的变量点。

因此,航空公司的var变量而不是val变量非常重要,因为您无法重新分配val变量。