我有一个简单的类层次结构,它表示一个类似于图形的结构,其中有几个不同类型的顶点使用case类实现:
sealed trait Node
sealed abstract case class Vertex extends Node
case class Arc extends Node
case class VertexType1 (val a:Int) extends Vertex
case class VertexType2 (val b:Int) extends Vertex
Run Code Online (Sandbox Code Playgroud)
这允许我写这样的匹配块:
def test (x: Node) = x match {
case _ : Arc => "got arc"
case _ : Vertex => "got vertex"
}
Run Code Online (Sandbox Code Playgroud)
或者像这样:
def test (x: Node) = x match {
case _ : Arc => "got arc"
case c : Vertex => c match {
case _ …Run Code Online (Sandbox Code Playgroud) 我知道有关案例类的计划有些变化,例如不允许它们之间的继承:
scala> case class Foo()
defined class Foo
scala> case class Bar() extends Foo()
<console>:9: warning: case class `class Bar' has case ancestor `class Foo'. Case-to-case inheritance has potentially dangerous bugs which are unlikely to be fixed. You are strongly encouraged to instead use extractors to pattern match on non-leaf nodes.
case class Bar() extends Foo()
^
defined class Bar
Run Code Online (Sandbox Code Playgroud)
或没有参数列表的案例类(不确定):
scala> case class Foo
<console>:1: warning: case classes without a parameter list have been deprecated;
use either case objects …Run Code Online (Sandbox Code Playgroud)