Ich habe eine Multimethode, die sich auf zwei Parameter spezialisiert:
%Vor%Wenn ich den Typ habe, kann ich die verschiedenen Defmethod-Aufrufe in Sets gruppieren:
%Vor%Manchmal möchte ich jedoch einen catch all oder einen Standardwert für eine der Gruppen, die aufgerufen würde, wenn keiner der anderen übereinstimmt:
%Vor% Dies funktioniert jedoch nur, wenn tag
tatsächlich :default
ist.
Was ist ein guter Weg, dies zu erreichen?
Ihre Versandfunktion muss wissen, welche Zuordnungen bereits definiert sind, damit sie entscheiden kann, wann sie auf einen Standard zurückgreifen soll. Die Funktion methods
gibt diese Zuordnungen an Sie zurück.
Multimethods unterstützen eine Fallback-Methode, die mit dem (konfigurierbaren) Wert :default
identifiziert wird, wenn keine der anderen Methoden zutrifft.
In Ihrem Fall fügen Sie einfach Folgendes hinzu:
%Vor%In diesem Beispiel ist es vielleicht erwähnenswert, dass Sie mithilfe von Clojure-Schlüsselwörtern Hierarchien erstellen können, und das Dispatching von Multimethoden versteht diese Hierarchien: Ссылка
Sie könnten das defmulti zu:
ändern %Vor%Dann schreiben Sie Ihre Methode so:
%Vor%Tags und Links clojure multimethod