【发布时间】:2011-06-27 18:09:57
【问题描述】:
我有一个带有几个可选参数的抽象基类:
abstract case class Hypothesis(
requirement: Boolean = false,
onlyDays: Seq[Int] = Nil,
…
) extends Something {…}
我真的需要明确地重复所有参数吗在顶部加上额外的关键字override val‽
case class SomeHypothesis(
anotherArg: SomeType,
override val requirement: Boolean = false,
override val onlyDays: Seq[Int] = Nil,
…
) extends Hypothesis(
requirement,
onlyDays,
…
) {…}
或者有没有类似的语法
case class SomeHypothesis(anotherArg: SomeType, **) extends Hypothesis(**) {…}
我什至不需要anotherArg,只是一种将所有关键字参数传递给超级构造函数的方法。
我真的很喜欢 Scala 关于构造函数的想法,但如果没有那个语法,我会失望的 :(
【问题讨论】:
-
如果可以的话,我会否决这条评论,因为它是错误的。至少对我来说,情况并非如此。请参阅this answer 上的第一条评论。我想你应该用默认参数试试。 (或者我的编译器做的事情和你的不同,但我对此表示怀疑。)
-
它与默认参数无关,但你是对的:在这种情况下你确实需要
override。由于您使用的是案例类,因此所有构造函数参数都隐含地具有val修饰符。由于名称冲突,您必须添加显式override修饰符(以及显式val修饰符,以使解析器满意)。对于仓促的评论,我深表歉意。
标签: scala inheritance constructor