W Scala, mogę zrobić caseclass, case class Foo(x:Int)
, a następnie umieścić go na liście tak:Operator "::" Scali, jak to działa?
List(Foo(42))
Teraz nic dziwnego tutaj. Poniższe jest dla mnie dziwne. Operator ::
jest funkcją na liście, prawda? Z dowolną funkcją z jednym argumentem w Scali, mogę ją nazwać notacją infiksową. Przykład to 1 + 2
jest funkcją (+)
na obiekcie Int
. Zdefiniowana przeze mnie klasa Foo
nie ma operatora ::
, więc w jaki sposób jest to możliwe?
Foo(40) :: List(Foo(2))
w Scala 2.8 RC1, uzyskać następujące wyjściowe z interaktywnym wierszu:
scala> case class Foo(x:Int)
defined class Foo
scala> Foo(40) :: List(Foo(2))
res2: List[Foo] = List(Foo(40), Foo(2))
mogę iść i go używać, ale to, co jest wyjaśnienie?
Obowiązuje również dla przekazywania parametrów typu do typów konstruktorów. Powiedzmy, że masz klasę przypadków: [H, T] (głowa: H, ogon: T); i klasa SomeType [A]; wtedy możesz zrobić zarówno nowy SomeType [:: [String, Int]] ("a", 3) i nowy SomeType [H :: T] ("a", 3) – lisak