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