оператор + = на неизменяемом множестве - PullRequest
5 голосов
/ 10 октября 2011

Когда я делаю, например:

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

Airlines является неизменным множеством.

+= не определено для неизменной черты Set.

То же самое += встроенный оператор в Scala?Я имею в виду, как Scala узнает о переназначении авиакомпаний с новым set("Qantas", "JetStar", "Air NZ", "Virgin")?

Ответы [ 2 ]

14 голосов
/ 10 октября 2011

Если оператор, оканчивающийся на = (например, +=), используется, но не определен в классе, компилятор Scala отменит его, например, на

airlines = airlines + "Virgin"

или, для ++=,у нас будет

airlines ++= airlines

, десагаредированных в

airlines = airlines ++ airlines

Конечно, поскольку dmeister notes , это будет скомпилировано, только если это новое выражение имеет смысл.Например, если мы имеем дело с var s.

См. Справочник Scala § 6.12.4 Операторы присваивания
(<=, >= и != исключаются как особые случаи, так как шаблоны также начинаются с =.)

3 голосов
/ 10 октября 2011

Оператор += создает новый неизменный набор, содержащий "Virgin", и назначает новый набор переменной airlines. Строго говоря, существующий объект набора не изменился, но набор возразил, что переменные авиакомпании указывают на.

Поэтому важно, чтобы это работало, что авиакомпании являются переменной var, а не val, потому что вы не можете переназначить переменную val.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...