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?
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.
Tags und Links scala implicit-conversion unapply