Scala Language

Operators in Scala

Built-in Operators

Scala has the following built-in operators (methods/language elements with predefined precedence rules):

Type Symbol Example
Arithmetic operators + - * / % a + b
Relational operators == != > < >= <= a > b
Logical operators && & || | ! a && b
Bit-wise operators & | ^ ~ << >> >>> a & b, ~a, a >>> b
Assignment operators = += -= *= /= %= <<= >>= &= ^= |= a += b

Scala operators have the same meaning as in Java

Note: methods ending with : bind to the right (and right associative), so the call with list.::(value) can be written as value :: list with operator syntax. (1 :: 2 :: 3 :: Nil is the same as 1 :: (2 :: (3 :: Nil)))

Operator Overloading

In Scala you can define your own operators:

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

With the above defines you can use it like:

ITTeam + Jack

or

ITTeam.+(Jack)

To define unary operators you can prefix it with unary_. E.g. unary_!

class MyBigInt {
   def unary_! = ...
}

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

Operator Precedence

Category Operator Associativity
Postfix () [] Left to right
Unary ! ~ Right to left
Multiplicative * / % Left to right
Additive + - Left to right
Shift >> >>> << Left to right
Relational > >= < <= Left to right
Equality == != Left to right
Bitwise and & Left to right
Bitwise xor ^ Left to right
Bitwise or | Left to right
Logical and && Left to right
Logical or || Left to right
Assignment = += -= *= /= %= >>= <<= &= ^= |= Right to left
Comma , Left to right

Programming in Scala gives the following outline based on the 1st character in the operator. E.g. > is the 1st character in the operator >>>:

Operator
(all other special characters)
* / %
+ -
:
= !
< >
&
^
|
(all letters)
(all assignment operators)

The one exception to this rule concerns assignment operators, e.g. +=, *=, etc. If an operator ends with an equal character (=) and is not one of the comparison operators <=, >=, == or !=, then the precedence of the operator is the same as simple assignment. In other words, lower than that of any other operator.


This modified text is an extract of the original Stack Overflow Documentation created by the contributors and released under CC BY-SA 3.0 This website is not affiliated with Stack Overflow