/ / Dlaczego przekazanie pojedynczego podtypu dla varargs w domyślnej def powoduje niedopasowanie typu? [duplikat] - scala, niejawne

Dlaczego przekazywanie jednego podtypu dla varargs w niejawnej def daje niedopasowanie typu? [duplicate] - scala, implicit

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 № 1

Funkcje 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.