Tipo de límites para parámetros de tipo no aplicados
-
28-10-2019 - |
Pregunta
¿Cómo puedo especificar los límites de un parámetro de tipo de orden superior no aplicado, de modo que el siguiente 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]]
Sin agregar más parámetros de tipo a Declr
. Tenga en cuenta que una solución puede asumir que el límite de Impl
El parámetro es siempre S <: Sys[S]
(es decir, ese es el límite de cualquier tipo que pueda entrar Declr
).
Creo que puedo escribir la restricción con un tipo miembro como esto:
trait Declr {
type Impl[S <: Sys[S]]
}
object X extends Declr {
type Impl[S <: Sys[S]] = X[S]
}
trait X[S <: Sys[S]]
Pero cómo hacer esto como un tipo parámetro (como la reexpresión de type Impl
es muy ruidoso y quiero tener object X
lo más limpio posible)?
Solución
Por que no
trait Declr[Impl[S <: Sys[S]]]
trait Sys[ S <: Sys[ S ]]
object X extends Declr[ X ]
trait X[ S <: Sys[ S ]]
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow