defmethod alle fangen

8

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?

    
Brigham 25.02.2012, 01:20
quelle

3 Antworten

7

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.

%Vor%     
user100464 25.02.2012, 06:00
quelle
7

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: Ссылка

    
Alex Taggart 25.02.2012 08:17
quelle
0

Sie könnten das defmulti zu:

ändern %Vor%

Dann schreiben Sie Ihre Methode so:

%Vor%     
Alex Baranosky 25.02.2012 01:36
quelle

Tags und Links