我有以下代码:
trait A {
def x: Option[Int]
def y: Option[String]
}
case class A1(
override val x: Option[Int] = Some(1),
override val y: Option[String] = Some("abc")
) extends A
case class A2() extends A {
override val x = Some(1)
override val y = Some("abc")
}
在A1的定义中,我必须指定x和y的类型,它们是Option [Int]和Option [String],
x: Option[Int]
和val y: Option[String]
但我不必指定A2的类型
有人可以帮助我为A1而不是A2吗?
答案 0 :(得分:2)
这是因为您在case类的构造函数中创建了trait A
的重写值。在A2
中,您在类主体中覆盖它们,这使它们就像任何其他类成员一样。请记住,你不能写这样的东西
case class A1(val x = Some(1), val y = Some("Asdf")) extends A
因为你需要为你的构造函数参数赋予类型,所以它只是普通的Scala(以及一般的编程)语义,这就是为什么你不能做你想要做的事情。