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%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
:
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.
Tags und Links scala inheritance traits playframework-2.0