En Scala, PUEDO caseclass, case class Foo(x:Int)
, y luego ponerlo en una lista así:Operador '::' de Scala, ¿cómo funciona?
List(Foo(42))
Ahora, nada extraño aquí. Lo siguiente es extraño para mi El operador ::
es una función en una lista, ¿verdad? Con cualquier función con un argumento en Scala, puedo llamarlo con notación infija. Un ejemplo es 1 + 2
es una función (+)
en el objeto Int
. La clase Foo
que acabo de definir no tiene el operador ::
, entonces, ¿cómo es posible?
Foo(40) :: List(Foo(2))
En Scala 2.8 RC1, me sale el siguiente salida desde el modo interactivo:
scala> case class Foo(x:Int)
defined class Foo
scala> Foo(40) :: List(Foo(2))
res2: List[Foo] = List(Foo(40), Foo(2))
puedo seguir y lo uso, pero ¿cuál es la explicación?
También se aplica para pasar parámetros de tipo para escribir constructores. Supongamos que tiene una clase de caso :: [H, T] (encabezado: H, cola: T); y clase SomeType [A]; entonces podrías hacer tanto SomeType [:: [String, Int]] ("a", 3) como SomeType [H :: T] ("a", 3) – lisak