Scala - Hinzufügen zu Int

8

Ich möchte das tun können:

%Vor%

Aber Int hat keine unapply -Methode.

Ich habe diese Antwort gefunden, die Anweisungen gibt, wie man implizit eine Methode zu einer existierenden hinzufügen kann Objekt, also habe ich es ausprobiert. Die Lösung, die sie gaben, funktioniert, aber leider nicht zum Mustervergleich. Folgendes habe ich:

%Vor%

Diese Testfälle sind alle in Ordnung:

%Vor%

Aber der, den ich will, scheitert:

%Vor%

Wenn die implizite Konvertierung funktioniert und der Mustervergleich mit unapply funktioniert, warum legt Scala diese beiden Dinge nicht für den impliziten Mustervergleich zusammen?

    
dhg 15.03.2012, 19:59
quelle

1 Antwort

8

bearbeiten Meine ursprüngliche Argumentation war also nicht gut. Der wahre Grund ist von Abschnitt 8.1.8 der Scala-Sprachspezifikation

%Vor%

Das heißt, das Extraktorobjekt muss stabil sein und eine implizite Konvertierung ist nicht stabil. Es wird keine Erklärung gegeben, warum der Extraktor stabil sein muss; Ich vermute, dass Scala den Extraktor nicht als Ausdruck behandeln möchte, weil das schnell mehrdeutig werden könnte:

%Vor%

Nun, was ist der Konstruktor und welche sind die Mustervariablen?

Zum Glück können Sie das tun und es funktioniert gut (obwohl, wie Sie kommentiert, führt andere Probleme ein):

%Vor%

da der Typ Int und das Objekt Int in verschiedenen Namespaces sind.

    
Owen 15.03.2012 20:29
quelle