Scala Language
Operatorzy w Scali
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.