Можно даже написать:
val head :: tail = List(1, 2, 3)
По существу, все, где ожидается шаблон (присваивание, оператор match
или строка для понимания), может принимать экстрактор , который определяется как сущность с методом unapply
.
Один из кусочков синтаксического сахара , который вам предоставляет скала, - это; если у вас есть экстрактор X(a, b)
, это можно записать как a X b
. Вот пример с классами case (которые имеют экстрактор по умолчанию):
scala> case class X(a: Int, b: String)
defined class X
scala> val a X b = X(1, "two")
a: Int = 1
b: String = two
Возможность записи таких сущностей infix распространяется и на типы:
scala> type MappedTo[A, B] = Map[A, B]
defined type alias MappedTo
scala> def foo(m: Int MappedTo String) = m foreach println
foo: (m: MappedTo[Int,String])Unit
Обратите внимание, что ни в одном случае scala не ограничивает такие инфиксные операторы символическими идентификаторами