当我这样做时:
var airlines = Set("Qantas", "JetStar", "Air NZ")
airlines += "Virgin"
航空公司是一个不可改变的集合。
+=
未在不可变的Set trait上定义。
scala中的内置运算符是+=
吗?我的意思是scala如何知道用新的set("Qantas", "JetStar", "Air NZ", "Virgin")
重新分配航空公司?
答案 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
变量。