+ =運算符,當我做e.g:上不可變Set
var airlines = Set("Qantas", "JetStar", "Air NZ")
airlines += "Virgin"
航空公司是一個不可變設置。
+=
未定義在不可變的Set特徵上。
那麼+=
是scala中的內置運算符嗎?我的意思是斯卡拉知道如何重新分配一個新的set("Qantas", "JetStar", "Air NZ", "Virgin")
航空公司?
+ =運算符,當我做e.g:上不可變Set
var airlines = Set("Qantas", "JetStar", "Air NZ")
airlines += "Virgin"
航空公司是一個不可變設置。
+=
未定義在不可變的Set特徵上。
那麼+=
是scala中的內置運算符嗎?我的意思是斯卡拉知道如何重新分配一個新的set("Qantas", "JetStar", "Air NZ", "Virgin")
航空公司?
如果使用以=
(例如+=
)結尾的運算符但未在類上定義,則Scala編譯器將將其解析爲例如
airlines = airlines + "Virgin"
,或者爲++=
,我們就會有
airlines ++= airlines
脫到
airlines = airlines ++ airlines
當然,作爲dmeister notes,如果新的表達是有意義的,這隻會編譯。例如,如果我們處理var
s。
參見Scala Reference §6.12.4 Assignment Operators
(<=
,>=
和!=
被排除作爲特殊情況,如被圖案也與=
開始。)
的+=
操作者創建包含"Virgin"
一個新的不可變set並分配新的設定到airlines
變量。嚴格來說,現有的集合對象並沒有改變,但集合反對航空公司的變數指向。
因此,重要的是這項工作的航空公司是var
變量而不是val
,因爲您不能重新分配val
變量。
你的意思是'+ ='?或只是'='? – Dzhu
我的意思是以'='結尾,所以'+ ='或' - ='或'++ ='的確如此。 ('<=' , '> ='和'!='作爲特殊情況排除在外,模式也以'='開始)。 – Debilski