案例类实现特征

时间:2014-12-15 19:13:15

标签: scala

Case类可以扩展特征并使用其字段实现它。

trait IWork {
  def itWorks: String
}
case class Example(itWorks: String) extends IWork

它编译并正常工作。你能解释一下,为什么不能编译?

trait IsAfter {
  def after(test: Date): Boolean
}
case class Example2(after: Date => Boolean) extends IsAfter

1 个答案:

答案 0 :(得分:5)

您可以使用def实现抽象val,这就是您在第一个示例中所做的事情。

但是,你假设方法和功能是一样的。不幸的是,情况并非如此,尽管scala编译器尽最大努力隐藏这一事实。

Here's a thorough explanation of the differences

因此,您无法使用函数实现抽象方法,但必须执行类似

的操作
class Example2(a: Date => Boolean) extends IsAfter {
  def after(test: Date) = a(test)
}