我是 scala 新手,有 java 背景。
有没有一种方法可以在类继承树中以叶子作为案例类和节点抽象类或特征来模式匹配超类(或特征)?据我所知,案例类继承是不允许的。
我认为在大型继承树中匹配抽象类的模式会非常有帮助
下面代码中最后一个case在编译过程中match语句出错
sealed trait Person {
def name: String
}
case class Customer(name: String, email: String) extends Person
sealed trait Employee extends Person {
def id: Int
}
case class Worker(name: String, id: Int, skills: Array[String]) extends Employee
case class Manager(name: String, id: Int, title: String) extends Employee
def process(p: Person) = p match {
case Customer(_, email) => email
case Employee(name, _) => name + "@acme.com"
}
你错过了name
领域在Employee
and an unapply
的伴随对象中的方法Employee
:
sealed trait Employee extends Person {
def id: Int
def name: String
}
object Employee {
def unapply(e: Employee): Option[(String, Int)] =
Option(e) map { e =>
(e.name, e.id)
}
}
通过上述更改,处理方法不会出现任何问题:
def process(p: Person) = p match {
case Customer(_, email) => email
case Employee(name, _) => name + "@acme.com"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)