El siguiente pseudo-Scala, se obtiene una "referencia cíclico ilegal" error:¿Por qué esta referencia cíclica con una proyección de tipo es ilegal?
trait GenT[A]
trait T extends GenT[T#A] {
type A
}
Preguntas: ¿Por qué esto es ilegal? ¿Hay un problema fundamental con la solidez o es una limitación del sistema de tipo Scala? ¿Hay una solución alternativa?
Mi intención es crear un rasgo T
con un miembro de tipo A
que se puede elevar bajo demanda a un parámetro de tipo mediante el superretrato GenT[A]
. Una aplicación podría ser la expresión de limitaciones, por ejemplo
def foo[A, S1 <: GenT[A], S2 <: GenT[A]] ...
Esto podría ser utilizado como si fuera def foo[S1 <: T, S2 <:T] ...
con la restricción de que S1#A == S2#A
.
Si la técnica fuera posible, también podría ayudar a la pregunta: ¿How to specialize on a type projection in Scala?
Nota: Yo podría utilizar en lugar de GenT
T
en todas partes, pero estoy tratando de evitar que, debido a que podría causar una gran cantidad de parámetros de tipo para extenderme por todo mi código "infecciosamente".
Las dos preguntas siguientes parecen similares, pero son de un tipo diferente de referencia cíclico:
gran información, ¡Gracias! De hecho, estaba tratando de salir a la superficie del miembro tipo. –