Si può anche scrivere:
val head :: tail = List(1, 2, 3)
In sostanza tutto ciò in cui un modello è previsto (un incarico, una dichiarazione match
o di una riga in un per-di comprensione) può assumere un estrattore, che è definita come un'entità con un metodo unapply
.
Uno dei pezzi di zucchero sintattico che scala ti fornisce è quello; se si dispone di un estrattore X(a, b)
, questo può essere scritto come a X b
. Ecco un esempio con le classi di casi (che hanno un estrattore di default):
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
La capacità di scrivere tali entità infissa estende a tipi così:
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
Si noti che in entrambi i casi, lo fa scala limita tali operatori infissi agli identificatori simbolici
fonte
2011-12-29 09:08:47
Si consiglia di guardare [Scala scomposizione partita su operatore infisso] (http://stackoverflow.com/questions/1022218/scala-match-decomposition-on-infix-operator) e [Come è questa corrispondenza case case p attern working?] (http://stackoverflow.com/questions/1059145/how-is-this-case-class-match-pattern-working) – 4e6