2011-10-10 54 views
5

+ =運算符,當我做e.g:上不可變Set

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

航空公司是一個不可變設置。

+=未定義在不可變的Set特徵上。

那麼+=是scala中的內置運算符嗎?我的意思是斯卡拉知道如何重新分配一個新的set("Qantas", "JetStar", "Air NZ", "Virgin")航空公司?

回答

14

如果使用以=(例如+=)結尾的運算符但未在類上定義,則Scala編譯器將將其解析爲例如

airlines = airlines + "Virgin" 

,或者爲++=,我們就會有

airlines ++= airlines 

脫到

airlines = airlines ++ airlines 

當然,作爲dmeister notes,如果新的表達是有意義的,這隻會編譯。例如,如果我們處理var s。

參見Scala Reference §6.12.4 Assignment Operators
<=>=!=被排除作爲特殊情況,如被圖案也與=開始。)

+0

你的意思是'+ ='?或只是'='? – Dzhu

+0

我的意思是以'='結尾,所以'+ ='或' - ='或'++ ='的確如此。 ('<=' , '> ='和'!='作爲特殊情況排除在外,模式也以'='開始)。 – Debilski

3

+=操作者創建包含"Virgin"一個新的不可變set並分配新的設定到airlines變量。嚴格來說,現有的集合對象並沒有改變,但集合反對航空公司的變數指向。

因此,重要的是這項工作的航空公司是var變量而不是val,因爲您不能重新分配val變量。