5

Estoy tratando de hacer que Scala encuentre el tipo correcto para un tipo dependiente de ruta que viene de un tipo singleton.Exponer un tipo dependiente de ruta de un tipo singleton

primer lugar, aquí es el contenedor tipo para el ejemplo, y una instancia:

trait Container { 
    type X 
    def get(): X 
} 

val container = new Container { 
    type X = String 
    def get(): X = "" 
} 

puedo ver la cadena en este primer intento (por lo que ya tengo un escenario de trabajo):

class WithTypeParam[C <: Container](val c: C) { 
    def getFromContainer(): c.X = c.get() 
} 

val withTypeParam = new WithTypeParam[container.type](container) 

// good, I see the String! 
val foo: String = withTypeParam.getFromContainer() 

Pero cuando no hay un parámetro de tipo, esto ya no funciona.

class NoTypeParam(val c: Container) { 
    def getFromContainer(): c.X = c.get() 
} 

val noTypeParam = new NoTypeParam(container) 

// this does *not* compile 
val bar: String = noTypeParam.getFromContainer() 

¿Alguien sabe por qué es necesario el parámetro de tipo?

Respuesta

1

Consulte this hilo en scala-internals, en particular, la explicación de Adriaan.

Cuestiones relacionadas