Scala - implizite Konvertierung mit unapply

8

Ich möchte, dass ein Extraktor seine Parameter implizit konvertiert, aber es scheint nicht zu funktionieren. Betrachten Sie diesen sehr einfachen Fall:

%Vor%

Aber ich kann es nicht so verwenden, wie ich es erwarte:

%Vor%

Kann jemand erklären, warum der Parameter nicht von String in MyString konvertiert werden kann? Ich würde erwarten, dass es string2mystring("a") on the fly nennt. Natürlich könnte ich das Problem umgehen, indem ich val Apply(y) = MyString("a") sage, aber es scheint so, als müsste ich das nicht machen.

Hinweis: Diese Frage ähnelt dieser , aber 1) dass man nicht wirklich eine gute Antwort darauf hat, warum das passiert, 2) das Beispiel ist komplexer, als es sein muss.

    
dhg 18.07.2011, 17:07
quelle

1 Antwort

14

Implizite Konvertierungen werden beim Mustervergleich nicht angewendet. Das ist kein Bug oder ein Problem mit deinem Code, es ist einfach eine Designentscheidung der Scala-Entwickler.

Um es zu beheben, sollten Sie einen anderen Extraktor schreiben, der ein String akzeptiert - was wiederum Ihre implizite Konvertierung aufrufen kann.

Alternativ können Sie auch mit einer Ansichtsgrenze versuchen, die ebenfalls zu funktionieren scheint. Dies funktioniert auch, wenn Sie später andere implizite Konvertierungen zu MyString definieren:

%Vor%     
Jean-Philippe Pellet 18.07.2011, 17:18
quelle