L'erreur est illustrée ci-après:types Résumé + auto + types dérogatoire type, et erreur « Valeur xxx est pas membre de Component.this.T »
trait Base { type T }
trait Component { self: Base =>
override type T <: MyT
val factory: Factory
trait Factory { def get_t: T }
trait MyT { def xxx: Unit }
class User {
val t: T = factory.get_t
def yyy = t.xxx
}
}
trait ComponentImpl { self: Component =>
type T = TImpl
class TImpl extends MyT {
def xxx = println("xxx")
}
val factory = new Factory {
def get_t: T = new TImpl
}
}
Et je reçois l'erreur:
<console>:26: error: value xxx is not a member of Component.this.T
def yyy = t.xxx
Avec une certaine redondance, je poste aussi l'exemple minimal comme suggéré par @slouc et @Kolmar
trait Base { type T }
trait MyT { def xxx: Unit }
trait Component { self: Base =>
override type T <: MyT
val t: T
def yyy = t.xxx // error
}
Il semble que je Caho t tirer parti de la connaissance partielle, incrémentale donnée par la contrainte.
Ma question ne concerne pas l'approche, plutôt je suis intéressé à comprendre les raisons de l'erreur.
Pour fournir plus de contexte, j'ajouterais aussi que j'ai eu ce problème en essayant de convertir une relation d'héritage en une relation basée sur le type de soi entre deux composants.
Un exemple un peu plus simple: 'trait Base {type T}; classe MyT; trait Component {self: Base => type T <: MyT; implicitement [T <:
Kolmar