2016-08-29 4 views
1

Ich habe zwei Züge:Legendes DI in Scala

trait A { 
    def a 
} 

Und:

trait B { this: A => 
    def b 
} 

Jetzt habe ich versucht, trait B, da dies zu nutzen:

def method(bTrait: B) = bTrait.a //error 

aber es weigert sich, zu kompilieren . Ich dachte, wir könnten uns darauf verlassen, dass jede Implementierung von B immer A verlängert. Was ist los mit dir? Warum kompiliert es nicht?

Antwort

1

Ich dachte, wir an, dass alle Implementierungen von B verlassen konnte immer A

erstreckt Das ist nicht das, was this: A => Mittel. Was es bedeutet, ist: "Um B zu verwenden, benötige ich eine Instanz von A zur Kompilierzeit zur Verfügung gestellt werden". Dies kann durch mixin

erfolgen Wenn Sie verstehen, dass Sie tun können:

def method(bTrait: B with A) = bTrait.a 
+0

Was meinen Sie bei der Kompilierung zur Verfügung gestellt werden? Wenn ich keine Klasse mache, die beide Merkmale implementiert, bekomme ich den Fehler _llegal vererbung, Selbsttyp-BMpl entspricht nicht A_. Es bedeutet also, dass beide Eigenschaften implementiert werden sollten. – user3663882

+0

@ user3663882 Es bedeutet, dass Sie, um mit einer Instanz von "B" zu arbeiten, etwas vom Typ "A" hineinmischen müssen. –

+0

Ah ..., verstanden. Vielen Dank. – user3663882