在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
抽象类是否更适合此目的?
答案 0 :(得分:1)
嗯,你宣称的是一个有三种抽象方法的特征。
您的第一个实现声明了一个案例类,其中3个值与FooBar
中声明的抽象方法相匹配。由于Scala中没有括号和值的方法基本相同,因此可以使用。
您的第二个实现调用FooBar
的构造函数,其中包含3个不存在的值。它从哪里得到A
?
你的第三个实现是声明一个没有实现抽象方法的具体类,并且无法编译。
我不知道你所要求的(理智)解决方案。您正在声明抽象方法,并希望不实现它们。通过宏可能是可行的,但似乎没有太大的好处。