Defrecord mit optionalen Tasten

8

Ich bin ein absoluter Neuling, der im Grunde genommen einige Tutorials abhandeln und versuchen möchte. Ich habe eine Frage zu defrecord s.

Hier ist die Sache, die ich versuche zu tun:

%Vor%

Im obigen Code würde ich gerne key3 und key4 als optional haben, so dass ich ihnen nicht jedesmal Werte geben muss, wenn ich ein somemap Objekt erstelle.

Es gibt eine ähnliche Frage hier , aber es verhält sich genau umgekehrt was ich hier versuche zu tun.

Also ist es möglich, defrecord mit optionalen Feldern zu definieren?

    
stephanruhl 15.11.2012, 05:26
quelle

2 Antworten

8

Wenn Sie (defrecord T [...]) verwenden, werden zwei Factory-Funktionen erstellt: ->T und map->T .

Der erste verwendet die Positionsparameter als Schlüssel. Der zweite wendet eine willkürliche Karte auf den Datensatz an.

Sie können key3 und key4 im Konstruktor behalten und map->somemap verwenden.

%Vor%     
kotarak 15.11.2012, 07:22
quelle
6

Da Datensätze in Clojure die Map-Schnittstelle implementieren, sind alle Felder außer den im Konstruktor angegebenen optional.

Wenn Sie also Ihren Datensatz nur mit key1 und key2 deklarieren, werden nur key1 und key2 im Konstruktor benötigt, aber Sie können einfach key3 oder key4 (oder beliebig anderen Schlüssel, indem Sie ihnen wie jeder anderen Karte einen Wert zuweisen.

    
Jordan Lewis 15.11.2012 05:36
quelle

Tags und Links