Est-il possible de résoudre un paramètre implicite pour un type B si un type implicite est défini pour son super type A?Résoudre le paramètre implicite du super type
Voici un exemple:
J'ai une Enumerable classe de types:
trait Enumerable[A] {
def name(a: A): String
def list: List[A]
//... other methods
}
object Enumeration {
def name[A, T >: A](a: A)(implicit ev: Enumerable[T]) = ev.name(a)
def list[T](implicit ev: Enumerable[T]) = ev.list
// ...
}
Je définir une instance de dénombrable:
sealed trait Season
case object Winter extends Season
case object Spring extends Season
case object Summer extends Season
case object Fall extends Season
implicit val seasonEnumerable = new Enumerable[Season] {
override def list: List[Season] = List(Winter, Spring, Summer, Fall)
}
// working :
Enumeration.name(Winter: Season) shouldBe "winter"
// faling :
Enumeration.name(Winter) shouldBe "winter"
Enumeration.name (hiver) échoue si Je ne dis pas au scalac que l'hiver est une saison. J'ai spécifié que le paramètre implicite dans la signature de la méthode 'name' est un supertype de A, mais ce n'est pas suffisant ...
Y a-t-il une meilleure façon de procéder?
En effet! Merci :) Pourriez-vous expliquer la différence entre def nom [A] (a: A) (implicite ev: Enumerable [_>: A]) = ev.nom (a) et def nom [A, T>: A] (a: A) (implicite ev: Enumerable [T]) = ev.nom (a)? – Loic
J'ai développé la réponse. –