Biorąc pod uwagę następujący fragment kodu
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
}
}
Otrzymuję następujący błąd
scala> Creator(B())
<console>:12: error: type mismatch;
found : B
required: Plus
Creator(B())
Jeśli zmienię typ supersów na A, otrzymam następujące
scala> Creator(B())
res9: Int = 5
Dlaczego dostaję powyższe zachowanie? Wiem, że mogę po prostu zdefiniować dwa ukryte deficyty dla A i A *, ale chciałbym wiedzieć, dlaczego muszę to zrobić.
Odpowiedzi:
0 dla odpowiedzi № 1Funkcje niejawnej konwersji można zawsze stosować tylko do jednego parametru. W związku z tym implicit def supersWrapper(supers: A*)
nie ma sensu, ale scalac nie generuje ostrzeżenia.