Scala: что делают операторы ": =" и ":: ="? - PullRequest
6 голосов
/ 03 сентября 2011

Я довольно новый со скалой.Я пролистал книгу и наткнулся на эти два оператора в коде.Что они делают?

Ответы [ 2 ]

14 голосов
/ 03 сентября 2011

Синтаксический сахар

Существует некоторый синтаксический сахар, который применяется при использовании операторов в Scala.

Рассмотрим оператор *. Когда компилятор встречает a *= b, он проверит, определен ли метод *= в a, и, если возможно, вызовет a.*=(b). В противном случае выражение расширится до a = a.*(b).

Однако любой оператор, оканчивающийся на :, будет заменять правый и левый аргументы при преобразовании в вызов метода. Так a :: b становится b.::(a). С другой стороны, a ::= b становится a = a.::(b), что может быть нелогичным из-за отсутствия изменения порядка.

Из-за особого значения невозможно определить оператор :. Так что : используется вместе с другими символами, например :=.

Значение операторов

Операторы в Scala определяются авторами библиотеки, поэтому они могут означать разные вещи.

Оператор

:: обычно используется для объединения списков, а a ::= b означает take a, prepend b to it, and assign the result to a.

a := b обычно означает set the value of a to the value of b, в отличие от a = b, что приведет к the reference a to point to object b.

3 голосов
/ 03 сентября 2011

Это вызывает метод : или :: для объекта с левой стороны, с объектом с правой стороны в качестве аргумента, и присваивает результат переменной с левой стороны.

foo ::= bar

эквивалентно

foo = foo.::(bar)

См. Документацию для метода : или :: типа объекта.

(Для коллекций метод :: добавляет элемент в начало списка.)

...