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

Dzh*_*zhu 5 scala

当我这样做时:

var airlines = Set("Qantas", "JetStar", "Air NZ")
airlines += "Virgin"
Run Code Online (Sandbox Code Playgroud)

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

+= 没有在不可变的Set trait上定义.

所以是+=Scala中的一个内置的操作?我的意思是scala如何知道用新的航空公司重新分配航空公司set("Qantas", "JetStar", "Air NZ", "Virgin")

Deb*_*ski 14

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

airlines = airlines + "Virgin"
Run Code Online (Sandbox Code Playgroud)

或者,因为++=,我们有

airlines ++= airlines
Run Code Online (Sandbox Code Playgroud)

堕入

airlines = airlines ++ airlines
Run Code Online (Sandbox Code Playgroud)

当然,正如dmeister所说,只有在新表达式有意义时才会编译.例如,如果我们处理vars.

的Scala参考§6.12.4赋值运算符
(<=,>=并且!=被排除作为特殊情况,因为是模式也开始=.)