Ich möchte eine Funktion replace-several
schreiben, die eine Zeichenfolge und eine Reihe von Ersetzungen erhält und alle Ersetzungen anwendet (wobei die Ersetzungen das Ergebnis der vorherigen Ersetzungen sehen).
Ich dachte über die folgende Schnittstelle nach:
%Vor%Zwei Fragen:
Hinweis: Um einen einzelnen Ersatz zu erstellen, ist replace
in verfügbar clojure.string .
Hier ist eine weitere Aufnahme, die jedoch unterschiedliche Ausgabeergebnisse hat. Diese verwendet die Regex-Engine-Funktionen, so dass sie möglicherweise schneller ist, auch die Schnittstelle ist anders, da sie Schlüssel auf Ersetzungszeichenfolgen abbildet. Ich biete dies an, falls es für jemanden mit einer ähnlichen Frage nützlich sein könnte.
%Vor%Also wäre die Verwendung so:
%Vor%= & gt; "clj"
Ich bin zu spät zu dieser Party, aber für das, was es wert ist, denke ich, dass die meiste idiomatische Methode darin besteht, Threading und mehrere Ersetzungen zu verwenden:
%Vor%Die Bedeutung davon ist ziemlich klar, obwohl es nett ist, das mehrfache "Ersetzen" zu vermeiden.
Ich persönlich würde dafür keine separate Funktion erstellen, da es sich nur um eine Zusammensetzung existierender Clojure-Funktionen handelt:
(reduce-kv clojure.string/replace "Hello" {#"[A-Z]" "J", "o" "y"}
;=> "Jelly"
Natürlich, wenn Sie Varargs und eine Schnittstelle wollen, dann:
(defn replace-many [string & {:as rplcmnts}]
(reduce-kv clojure.string/replace string rplcmnts))
Tags und Links clojure