El siguiente código intenta imitar Polymorphic Embedding of DSLs: en lugar de dar el comportamiento en Inner
, está codificado en el método useInner
de su clase adjunta. Agregué el método enclosing
para que el usuario solo tenga que mantener una referencia a las instancias Inner
, pero siempre puede obtener su instancia adjunta. Al hacer esto, todas las instancias Inner
de una instancia específica Outer
están vinculadas a un solo comportamiento (pero se desea aquí).Refiriéndose al tipo de una clase interna en Scala
abstract class Outer {
sealed class Inner {
def enclosing = Outer.this
}
def useInner(x:Inner) : Boolean
}
def toBoolean(x:Outer#Inner) : Boolean = x.enclosing.useInner(x)
No compila y Scala 2.8 se queja de:
type mismatch; found: sandbox.Outer#Inner
required: _81.Inner where val _81:sandbox.Outer
De Programming Scala: Nested classes y A Tour of Scala: Inner Classes, me parece que el problema es que useInner
Espera como argumento una Inner
ejemplo de un Outer
instancia específica .
¿Cuál es la verdadera explicación y cómo resolver este problema?
¿Es posible para modificar toBoolean en lugar de useInner? –
Si se intentó 'def toBoolean (x: y.Inner forSome {val y: Outer}): Boolean = x.enclosing.useInner (x)' (Tipos Existenciales - Cuantificación Existencial sobre los Valores de la referencia de Scala) pero no lo hizo trabajo. –