Ich versuche, eine Instanz eines Merkmals Dies funktioniertWie erstelle ich eine Instanz eines Merkmals in einer generischen Methode in scala?
val inst = new Object with MyTrait
gut mit dieser Methode zu schaffen, aber ich möchte in, das heißt auf eine Generatorfunktion diese Schöpfung bewegen.
object Creator {
def create[T] : T = new Object with T
}
Ich werde natürlich das Manifest müssen irgendwie die Art Löschung Probleme zu beheben, aber bevor ich das bekommen, ich laufe in 2 Fragen:
Selbst mit einem impliziten Manifest Scala verlangt immer noch, dass T ein Merkmal ist. Wie füge ich eine Einschränkung hinzu, um [T] zu erstellen, so dass T ein Merkmal ist?
Wenn ich die Methode Class.newInstance verwenden möchte, um die Instanz dynamisch zu erstellen, anstatt "neu" zu verwenden, wie würde ich das "mit" in "neues Objekt mit T" angeben? Ist es möglich, zur Laufzeit dynamisch neue Beton-Mixin-Typen zu erstellen?
Dies scheint eine interessante Einschränkung der Sprache zu sein, aber ich sehe keinen Grund, warum es nicht mit einer neuen "dynamischen" Mixin-Unterstützung in Scala behoben werden konnte. Der Eigenschaftscode ist bereits als statische Methode verfügbar, so dass die Linearisierungssuche zur Laufzeit statt in den Klassenbytecode integriert werden konnte. Dann müssten Sie nur die Überprüfung des Laufzeittyps hinzufügen, damit "asInstanceOf" funktioniert. – ACyclic