Синтаксический сахар
Существует некоторый синтаксический сахар, который применяется при использовании операторов в 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
.