Das scheint zu funktionieren, aber ich konnte den Cast bei der Berechnung des Repräsentanten nicht loswerden:
%Vor%Übrigens: Seien Sie vorsichtig mit dem Anwendungsmerkmal, es ist zu Recht veraltet.
Ich versuche einen generischen Restklassenring in Scala zu definieren. Ein Restklassenring wird durch irgendeinen Basisring (z. B. die ganzen Zahlen) und einen Modul (z. B. zwei) definiert, der ein Wert aus dem Basisring ist. Beide Ringe und ihre Elemente sind Objekte, daher wäre die Art des Moduls normalerweise abhängig vom Typ des Basisrings. Ich verstehe, dass dies in Scala nicht erlaubt ist (aus guten Gründen), also versuche ich es zu emulieren, indem ich den Typ approximiere und eine Laufzeitprüfung mache, wenn der Restklassenring konstruiert wird.
Die Definition von %code% wird ohne Fehler akzeptiert, aber Scala lässt mich nicht instanziieren, für das Argument %code% erhalte ich die Fehlermeldung
%Vor%Mache ich etwas falsch? Könnte das ein Fehler im Scala Type Checker sein? Gibt es eine bessere Möglichkeit, %code% zu definieren?
Dies ist mit Scala 2.8.0 in der Eclipse IDE für Helios. Das Problem ist bereits für 2.7.x aufgetreten. Hier ist eine vereinfachte Version des Codes:
%Vor%UPDATE: %code% hinzugefügt, um Änderungen in %code%
zu verdeutlichenDas Problem scheint zu sein, dass der Inferenztyp nicht automatisch den spezifischsten Typ auswählt, der in Ihrem Fall benötigt wird. Darüber hinaus können Sie kein abhängiges Typargument in derselben Parameterliste wie den Definitionstyp haben.
Sie können die Instanz, von der der Typ abhängt, im äußeren Bereich abrufen (was in der %code% -Klasse geschieht) und den Compiler dazu zwingen, den spezifischsten Typ auszuwählen, wenn Sie die Klasse %code% instanziieren :
%Vor%Jetzt können Sie es wie folgt verwenden:
%Vor%