Type Bounds pour les paramètres de type non appliqués
-
28-10-2019 - |
Question
Comment puis-je spécifier les limites d'un paramètre de type d'ordre supérieur non appliqué, de sorte que le suivant compile:
trait Declr[Impl[_]] // need to specify constraints for Impl's type parameter
trait Sys[S <: Sys[S]]
object X extends Declr[X] // doesn't compile, because S is more strict
trait X[S <: Sys[S]]
Sans ajouter plus de paramètres de type à Declr
. Notez qu'une solution est autorisée à supposer que la limite de Impl
Le paramètre est toujours S <: Sys[S]
(c'est-à-dire que c'est à l'origine de tout type qui peut entrer dans Declr
).
Je pense que je peux écrire la contrainte avec un type membre comme ça:
trait Declr {
type Impl[S <: Sys[S]]
}
object X extends Declr {
type Impl[S <: Sys[S]] = X[S]
}
trait X[S <: Sys[S]]
Mais comment faire cela en tant que type paramètre (comme le retraitement de type Impl
est très bruyant, et je veux avoir object X
aussi propre que possible)?
La solution
Pourquoi pas
trait Declr[Impl[S <: Sys[S]]]
trait Sys[ S <: Sys[ S ]]
object X extends Declr[ X ]
trait X[ S <: Sys[ S ]]
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow