Ich schreibe gerade in scala und ich betrachte mich selbst als Neuling. Ich habe 3 Klassen außerhalb meiner Kontrolle, das bedeutet, dass ich sie nicht ändern kann.
%Vor%Dies ist ein vereinfachtes Beispiel, der tatsächliche Code ist komplizierter und die Klassen A, B haben viele andere ähnliche Methoden.
Ich muss Methode m für Instanzen der Klassen A, B
aufrufenDie offensichtliche Lösung ist:
%Vor%aber das beinhaltet Code-Duplizierung. Ich habe versucht, es mit Ente Typisierung zu lösen und bis jetzt meine beste Meinung zu diesem Thema ist dies:
%Vor%aber ich bekomme Inferenzfehler wie:
%Vor%Kann dieses Problem auf elegante Weise mit minimaler Magie gelöst werden?
Sie haben ein paar Optionen. Eine besteht darin, die Typparameter explizit anzugeben:
%Vor% Wenn die m
-Methode immer einen Wert des Typs zurückgibt, für den sie definiert wurde, können Sie die Typinferenz durch Kodieren dieser Tatsache in Ihrem fill
:
Sie können auch den Typalias überspringen:
%Vor%Ich würde jedoch sehr empfehlen, eine Typklasse zu verwenden - es ist ein bisschen syntaktischer Overhead, aber viel sauberer:
%Vor%Und dann:
%Vor%Kein reflektierender Zugriff und Sie verwenden eine allgemein verständliche Sprache.
Tags und Links scala type-inference