Gibt es eine Möglichkeit, Scalas RichString zu erweitern?

8

Da scala.runtime.RichString als final deklariert ist, können Sie es nicht wie class MyString extends RichString erweitern. Ich möchte die Bibliothek "aufpeppen" und einfach eine andere Methode hinzufügen. Wie würde ich das tun?

    
pr1001 20.06.2010, 23:20
quelle

1 Antwort

15

Da eine Schlüsselregel von implicits ist, dass immer nur einer angewendet wird, um einen bestimmten (Unter-) Ausdruckstyp zu überprüfen, pimpen Sie RichString , um wiederum das Komplement der Methoden hinzuzufügen, die es zu String hinzufügt. Es wird Ihnen nicht erlauben, die Methoden Ihrer Klasse RicherString (wenn Sie so wollen) zu sehen, als wären sie direkt in String-Instanzen verfügbar. Sie wären verfügbar, wenn Sie natürlich ein RichString hätten, und RichString -Instanzen sind von String instances einfach durch einfache Typzuschreibung verfügbar. Aber es ist nicht das, was jemand als bequem bezeichnen würde.

Aus praktischen Gründen ist das, wonach Sie fragen, in Scala nicht wirklich möglich.

Andererseits, wenn Sie nur eine alternative Erweiterung von String benötigen, können Sie einfach Ihre eigene erweiterte String-Klasse definieren. Wenn es zwischen den definierten und den in RichString definierten Methoden keine Überlappung gibt, gibt es für den Compiler keine Unklarheiten, die bei der Entscheidung, welche Anwendung zu treffen ist, aufgelöst werden müssen. Das ist wahrscheinlich gut genug, oder?

Außerdem wird dieser Ansatz (eine alternative, nicht überlappende implizite Konvertierung) nicht unterbrochen, wenn Sie zu Scala 2.8 wechseln, die StringOps anstelle von RichString hat.

Um dies zu tun, würden Sie etwas ähnliches wie folgt tun:

%Vor%     
Randall Schulz 21.06.2010, 00:13
quelle

Tags und Links