为什么在隐式 def 中为可变参数传递单个子类型会导致类型不匹配?
Why does passing in a single subtype for a varargs in an implicit def give a type mismatch?
给定以下代码片段
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* 定义两个隐式定义,但我想知道为什么我需要这样做。
隐式转换函数始终只能应用于一个参数。因此 implicit def supersWrapper(supers: A*)
没有意义,但 scalac 不会为此生成警告。
给定以下代码片段
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* 定义两个隐式定义,但我想知道为什么我需要这样做。
隐式转换函数始终只能应用于一个参数。因此 implicit def supersWrapper(supers: A*)
没有意义,但 scalac 不会为此生成警告。