斯卡拉案例类问题

Itt*_*ayD 8 scala class case

关于'::'案例类我有两个问题.

::可以用作

case head :: tail => ...
Run Code Online (Sandbox Code Playgroud)

它是如何工作的?意思是,Scala用于将List实例与:: case类匹配的流程究竟是什么?鉴于我有一个MyClass类,使用运算符op,我可以创建一个名为op的case类,我可以使用它作为:

case foo op bar => ....
Run Code Online (Sandbox Code Playgroud)

Eas*_*sun 5

     scala> abstract class Stack {
     |     def push(n :Int):Stack
     | }
      defined class Stack

     scala> final case class push(st :Stack,hd :Int) extends Stack {
     |     override def push(n :Int):Stack = new push(this,n)
     | }
     defined class push

     scala> object NullStack extends Stack {
     |     override def push(n :Int):Stack = new push(null,n)
     | }
     defined module NullStack

     scala> val s = NullStack.push(1).push(2)
     s: Stack = push(push(null,1),2)

     scala> def test(s :Stack) = s match { case st push i => println(st +"push " + i) }
     test: (Stack)Unit

     scala> test(s)
     push(null,1)push 2
Run Code Online (Sandbox Code Playgroud)