2011-10-10 24 views
5

quando lo faccio per esempio:l'operatore + = on Set immutabile

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

compagnie aeree è un insieme immutabile.

+= non è definito sul tratto di Set immutabile.

Quindi è += un operatore integrato in scala? Voglio dire come fa sapere a scala di riassegnare le compagnie aeree con un nuovo set("Qantas", "JetStar", "Air NZ", "Virgin")?

risposta

14

Se un operatore che termina con = (ad esempio +=) viene utilizzato ma non definito su una classe, il compilatore Scala lo desverà in es.

airlines = airlines + "Virgin" 

o, per ++=, avremmo

airlines ++= airlines 

private degli zuccheri in

airlines = airlines ++ airlines 

Naturalmente, come dmeister notes, questo verrà compilato solo se tale nuova espressione ha un senso. Ad esempio, se trattiamo con var s.

Vedi Scala Reference §6.12.4 Assignment Operators
(<=, >= e != sono esclusi come casi speciali, come sono i modelli inoltre cominciando con =.)

+0

vuoi dire '+ ='? o semplicemente '='? – Dzhu

+0

Intendo per finire con '=', quindi questo è vero per '+ =' o '- =' o '++ ='. ('<=' , '> =' e '! =' Sono esclusi come casi speciali, così come i pattern che iniziano con '='.) – Debilski

3

L'operatore += crea un nuovo set immutabile che contiene "Virgin" e assegna il nuovo set alla variabile airlines. A rigor di termini, l'oggetto set esistente non è cambiato, ma l'insieme ha contestato i punti variabili delle compagnie aeree.

Pertanto è importante che funzioni correttamente che le compagnie aeree siano una variabile var e non una val, poiché non è possibile riassegnare a una variabile val.