Implizite Objekte innerhalb von Klassen verwenden

8

Ich versuche Code zu schreiben, um Polynome innerhalb von Scala darzustellen. Ich brauche diesen Code, um polymorph zu sein, also verwende ich implicits, um mit verschiedenen Typen umzugehen. Ich habe:

%Vor%

Ich habe dort ein paar Funktionen gekürzt. Das kompiliert gut, aber wenn ich es versuche und benutze, erhalte ich seltsame Fehler:

%Vor%

Ich bin nicht sicher, wie ich es beheben soll. Definiere ich die impliziten Objekte am falschen Ort? Ich habe versucht, sie außerhalb der Klasse zu bewegen, aber dann scheitert der Compiler. Gibt es noch etwas, was ich tun muss, damit es richtig funktioniert?

    
Joe 13.05.2013, 12:21
quelle

1 Antwort

15

Die implizite Auflösung erfolgt an der Stelle, an der Sie die Funktion aufrufen, nicht an der Stelle, an der Sie sie definieren. Sie sollten Ihre implicits importieren, bevor Sie p1.eval aufrufen:

%Vor%

Da Ihre Implicits nicht wirklich an eine Poly-Instanz gebunden sind, können Sie sie außerhalb von Poly definieren.

Wenn Sie die Semiring implicits nicht explizit importieren möchten, können Sie sie im Begleitobjekt von Semiring definieren, da Scala nach übereinstimmenden Implicits im begleitenden Objekt sucht, wenn sie fehlen:

%Vor%

Dann müssen Sie sie nicht mehr importieren:

%Vor%     
Stephane Godbillon 13.05.2013, 12:41
quelle

Tags und Links