In Scala, I can make a caseclass, case class Foo(x:Int)
, and then put it in a list like so:
List(Foo(42))
Now, nothing strange here. The following is strange to me. The operator ::
is a function on a list, right? With any function with one argument in Scala, I can call it with infix notation.
An example is 1 + 2
is a function (+)
on the object Int
. The class Foo
I just defined does not have the ::
operator, so how is the following possible?
Foo(40) :: List(Foo(2))
In Scala 2.8 RC1, I get the following output from the interactive prompt:
scala> case class Foo(x:Int)
defined class Foo
scala> Foo(40) :: List(Foo(2))
res2: List[Foo] = List(Foo(40), Foo(2))
I can go on and use it, but what is the explanation?
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…