Szukaj…


Wbudowane operatory

Scala ma następujące wbudowane operatory (metody / elementy językowe z predefiniowanymi regułami pierwszeństwa):

Rodzaj Symbol Przykład
Operatory arytmetyczne + - * / % a + b
Operatorzy relacyjni == != > < >= <= a > b
Operatory logiczne && & || | ! a && b
Operatorzy bitowi & | ^ ~ << >> >>> a & b , ~a , a >>> b
Operatorzy przypisań = += -= *= /= %= <<= >>= &= ^= | = a += b

Operatory Scala mają takie samo znaczenie jak w Javie

Uwaga : metody kończące się na : bind do prawej (i prawej asocjacji), więc wywołanie z list.::(value) można zapisać jako value :: list ze składnią operatora. ( 1 :: 2 :: 3 :: Nil to to samo co 1 :: (2 :: (3 :: Nil)) )

Przeciążenie operatora

W Scali możesz zdefiniować własnych operatorów:

class Team {
   def +(member: Person) = ...
}

Z powyższymi definicjami możesz korzystać w następujący sposób:

ITTeam + Jack

lub

ITTeam.+(Jack)

Aby zdefiniować jednoargumentowe operatory, możesz poprzedzić je unary_ . Np. unary_!

class MyBigInt {
   def unary_! = ...
}

var a: MyBigInt = new MyBigInt
var b = !a

Priorytet operatora

Kategoria Operator Stowarzyszenie
Przyrostek () [] Z lewej na prawą
Unary ! ~ Od prawej do lewej
Mnożny * / % Z lewej na prawą
Przyłączeniowy + - Z lewej na prawą
Zmiana >> >>> << Z lewej na prawą
Relacyjny > >= < <= Z lewej na prawą
Równość == != Z lewej na prawą
Bitowe i & Z lewej na prawą
Bitowe xor ^ Z lewej na prawą
Bitowe lub | Z lewej na prawą
Logiczne i && Z lewej na prawą
Logiczne lub || Z lewej na prawą
Zadanie = += -= *= /= %= >>= <<= &= ^= | = Od prawej do lewej
Przecinek , Z lewej na prawą

Programowanie w Scali daje następujący zarys w oparciu o 1. znak operatora. Np. > Jest pierwszym znakiem w operatorze >>> :

Operator
(wszystkie inne znaki specjalne)
* / %
+ -
:
= !
< >
&
^
|
(wszystkie litery)
(wszyscy operatorzy przypisania)

Jedyny wyjątek od tej reguły dotyczy operatorów przypisania , np. += , *= Itd. Jeśli operator kończy się znakiem równości (=) i nie jest jednym z operatorów porównania <= , >= , == lub != , wówczas pierwszeństwo operatora jest takie samo jak proste przypisanie. Innymi słowy, niższy niż u jakiegokolwiek innego operatora.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow