7.16. Specjalne traktowanie operatorów przypisania
Operatory przypisania mogą być zamienione na operacje przypisania, gdy nie można ich poprawnie zinterpretować w inny sposób. Operator przypisania może być potraktowany w taki specjalny sposób, jeśli spełnione są łącznie następujące warunki:
- obiekt, na którym jest wywoływany operator, nie posiada metody o identyfikatorze takim, jak identyfikator operatora,
- obiekt, na którym jest wywoływany operator, nie może być przekształcony za pomocą niejawnej konwersji na obiekt, który posiada metodę o identyfikatorze takim, jak identyfikator operatora (operacje niejawnej konwersji zostaną przedstawione w rozdziale 20; na razie proponuję zignorować ten warunek),
- operacja a = a
b jest poprawna pod względem typów.
Operacja a
W kolejnych przykładach użyta jest klasa OpTest z pliku OperatorTest1.scala. W tej klasie jest zdefiniowana operacja +, ale nie ma zdefiniowanej operacji +=. W poniższym przykładzie wyrażenie a += b jest traktowane specjalnie i zamienione na a = a + b.
scala> var a = new OpTest("a")
a: OpTest = a
scala> var b = new OpTest("b")
b: OpTest = b
scala> a += b
scala> a
res1: OpTest = (a + b)
W klasie OpTest są również zdefiniowane operacje * oraz *=. W poniższym przykładzie wyrażenie c *= d nie jest traktowane specjalnie i nie jest zamieniane na c = c * d, ale jest traktowane po prostu jako wywołanie metody *=.
scala> var c = new OpTest("c")
c: OpTest = c
scala> var d = new OpTest("d")
d: OpTest = d
scala> c *= d
res2: OpTest = (c *= d)
scala> c
res3: OpTest = c
![]() | Specyfikacja języka Scala opisuje operatory przypisania w punkcie 6.12.4. |

