7.13. Operacje prefiksowe
Scala udostępnia specjalne sposoby wywoływania metod, z użyciem tak zwanych operatorów. Istnieją trzy rodzaje operatorów, które omówione zostaną po kolei: prefiksowe, postfiksowe i infiksowe.
Operacja prefiksowa polega na umieszczeniu operatora przed wyrażeniem,
którego dotyczy. Ta możliwość dotyczy tylko czterech operatorów: +,
-, ~ oraz !. Taka operacja jest tłumaczona na wywołanie, na
wyniku wyrażenia, metody unary_
scala> -12 res0: Int = -12 scala> 12.unary_- res1: Int = -12
Jeśli w klasie jest zdefiniowana jedna z metod unary_-, unary_+, unary_! lub unary_~ oraz jeśli ta metoda ma pustą listę parametrów lub nie ma jej wcale, to może być wywoływana za pomocą operacji prefiksowej.
Plik UnaryGreeting.scala: class UnaryGreeting(name: String) { def unary_! :String = "Hello "+name+"!"
def unary_+():String = "Welcome "+name
}
Instancje klasy UnaryGreeting, zdefiniowanej w pliku
UnaryGreeting.scala, mogą wywoływać metody unary_! i unary_+ za
pomocą operacji prefiksowej. Zwróćmy uwagę na spację w wierszu
,
znajdującą się przed dwukropkiem. Zapobiega ona zinterpretowaniu
dwukropka jako kolejnego znaku nazwy metody. W wierszu
analogiczna
spacja nie jest potrzebna, gdyż między nazwą metody, a dwukropkiem
znajdują się jeszcze nawiasy.
scala> val peter = new UnaryGreeting("Peter")
peter: UnaryGreeting = UnaryGreeting@1f0a5a1
scala> !peter
res2: String = Hello Peter!
scala> +peter
res3: String = Welcome Peter
Poniższa próba nie udaje się, gdyż metoda unary_- nie jest zdefiniowana.
scala> -peter
<console>:12: error: value unary_- is not a member of UnaryGreeting
-peter
^
![]() | Specyfikacja języka Scala opisuje operacje prefiksowe w punkcie 6.12.1. |
Plik UnaryGreeting.scala:
class UnaryGreeting(name: String) {
def unary_! :String = "Hello "+name+"!" 
