相关疑难解决方法(0)

用提取器替换案例类继承,保留Scala中的穷举检查

我有一个简单的类层次结构,它表示一个类似于图形的结构,其中有几个不同类型的顶点使用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)

inheritance scala pattern-matching case-class extractor

9
推荐指数
1
解决办法
7578
查看次数

在Scala 2.9之后,案例类会被删除哪些内容?

我知道有关案例类的计划有些变化,例如不允许它们之间的继承:

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)

inheritance scala class case deprecated

7
推荐指数
1
解决办法
2017
查看次数