Scala’s ‘::’ operator, how does it work?

From the Spec:

6.12.3 InfixOperations An infix operator can be an arbitrary
identifier. Infix operators have
precedence and associativity defined
as follows.

The associativity of an operator is
determined by the operator’s last
character. Operators ending in a colon
‘:’ are right-associative. All other
operators are left- associative.

You can always see how these rules are applied in Scala by printing the program after it has been through the ‘typer’ phase of the compiler:

scala -Xprint:typer -e "1 :: Nil"

val r: List[Int] = {
  <synthetic> val x$1: Int = 1;
  immutable.this.Nil.::[Int](x$1)
};

Leave a Comment