我有以下案例类
case class Task[I, O](
dd: DD,
parser: CP[I, (O, Option[CE])],
canonicalize: Boolean,
opt: Boolean,
schema: Schema,
remove: Boolean = false,
deduplicate: Boolean = false,
taskId: Option[String] = None
)(implicit
val ul: UL[O],
val ael: AEL[O],
val it: IT[I],
val ot: TT[O]
)
object Task {
def apply(
dd: DD,
sources: Sources,
cc: String,
tc: Option[TC] = None
)(implicit
context: PEC
)
}
我得到了
multiple overloaded alternatives of method `apply` define default arguments
显然,这里没有多个apply方法。有一个显式定义的apply方法,另一个由于case类而隐式定义。我必须提到,如果我从伴随对象的apply
方法中删除tc: Option[TC] = None
,编译就成功了。我理解here提供的解释,但我不明白tc: Option[TC] = None
是如何破坏编译的。
//编辑
更明确地说明编译器生成的内容。对于从case类生成的隐式apply方法,
apply$default$6:Boolean = false
apply$default$7:Boolean = false
apply$default$8:Option[String] = None
对于我定义的显式apply
,它只会创建
apply$default$4:Option[TC] = None
至少我是这么理解的冲突到底在哪里?
1条答案
按热度按时间juud5qan1#
Scala不允许在多个重载方法中存在默认值。默认值的位置或数据类型无关紧要。其中一个方法可能是
apply
方法,这一点也不重要。这将工作
这是行不通的
这是行不通的