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:

Operacja a = b, gdzie = spełnia powyższe warunki, jest interpretowana jak operacja a = a b, przy czym wyrażenie a jest ewaluowane tylko raz.

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.

Język programowania Scala Wydanie 2. Copyright © Grzegorz Balcerek 2016

Licencja Creative Commons

Ten utwór jest dostępny na licencji Creative Commons Uznanie autorstwa-Na tych samych warunkach 4.0 Międzynarodowe.

Oracle and Java are registered trademarks of Oracle and/or its affiliates. Other names may be trademarks of their respective owners.