给出以下代码片段
sealed trait A
case class B() extends A
object Creator {
def apply(plus: Plus) = plus()
}
sealed trait Plus {
def apply(): Int
}
object Plus {
implicit def supersWrapper(supers: A*) = // Changing this to just A works
new Plus {
def apply(): Int = 5
}
}
我收到以下错误
scala> Creator(B())
<console>:12: error: type mismatch;
found : B
required: Plus
Creator(B())
如果我将超级类型更改为A,我会得到以下内容
scala> Creator(B())
res9: Int = 5
为什么我得到上述行为?我知道我可以为A和A *定义两个隐式defs,但我想知道为什么我需要这样做。
答案 0 :(得分:0)
隐式转换函数始终只能应用于一个参数。因此implicit def supersWrapper(supers: A*)
没有意义,但scalac不会为此生成警告。