Definieren Sie eine abstrakte Klasse oder Eigenschaft, die von einem impliziten abhängt

8

Ich habe dieses Spiel Framework 2 Code (vereinfacht):

%Vor%

IdeaType class erweitert Entity und sein Begleitobjekt IdeaType erweitert EntityCompanion .

Wie Sie vielleicht erwarten, habe ich diese Art von Code in jedem Controller, also möchte ich das grundlegende Verhalten zu einem Merkmal extrahieren, etwa so:

%Vor%

Aber ich bekomme den folgenden Fehler:

%Vor%

Ich weiß nicht, wie ich sagen soll, dass das implizite Writes von den Klassen implementiert wird, die das Merkmal EntityController implementieren (oder die abstrakte Klasse EntityController erben)

- Bearbeiten

Bisher mache ich es jetzt so:

%Vor%

und benutze es so

%Vor%

Ich konnte scala nicht dazu bringen, es automatisch mit implicits auszuwählen. Ich habe versucht mit diesem Import, aber es hat nicht funktioniert

%Vor%     
opensas 18.10.2012, 02:50
quelle

1 Antwort

7

Wenn Sie möchten, dass die Steuerungsklassen selbst das implizite definieren, dann deklarieren Sie abstrakte implizite Werte und definieren Sie sie in den abgeleiteten Klassen.

%Vor%

Es ist jedoch viel praktischer, diese Implikate außerhalb des Controllers zu definieren, typischerweise im Companion-Objekt Ihrer Entity, so dass sie vom Compiler automatisch ohne Import gefunden werden können. Übergeben Sie dann die impliziten Werte an den Konstruktor von EntityController :

%Vor%

Schlussbemerkung, das Implizit zu List [MyEntity] ist wahrscheinlich nicht erforderlich (daher muss nur das implizite für MyEntity explizit definiert werden). Ich habe nicht überprüft, aber normalerweise bei der Verwendung dieses "typeclass pattern", Das Framework definiert bereits ein Implizit für jede Liste [T], vorausgesetzt, dass es ein implizites für T gibt. Dies ist wahrscheinlich der Fall, obwohl ich das nicht überprüft habe.

    
Régis Jean-Gilles 18.10.2012, 07:26
quelle