scala特征案例类和继承

时间:2017-12-20 09:59:32

标签: scala inheritance abstract-class traits case-class

在scala中定义案例类的类型层次结构时:

sealed trait FooBar {
  def A:Int
  def B:Int
  def C:Int
}

// works
final case class Bar(A:Int, B:Int, C:Int)extends FooBar

// fails
final case class Bar extends FooBar(A:Int, B:Int, C:Int)

// fails
final case class Foo extends FooBar

如何在定义继承类型时避免指定已经继承的参数?这可能没有任何宏:Scala case classes and constructors

抽象类是否更适合此目的?

1 个答案:

答案 0 :(得分:1)

嗯,你宣称的是一个有三种抽象方法的特征。

您的第一个实现声明了一个案例类,其中3个值与FooBar中声明的抽象方法相匹配。由于Scala中没有括号和值的方法基本相同,因此可以使用。

您的第二个实现调用FooBar的构造函数,其中包含3个不存在的值。它从哪里得到A

你的第三个实现是声明一个没有实现抽象方法的具体类,并且无法编译。

我不知道你所要求的(理智)解决方案。您正在声明抽象方法,并希望不实现它们。通过宏可能是可行的,但似乎没有太大的好处。