Ich habe versucht, dies mit Zitat, Zitat-Splicing, Eval und was auch immer ich denken kann, zu arbeiten, aber bisher kein Glück. Ich verstehe, warum es nicht funktioniert - es wird als eine Karte gesehen, und es versucht, a
, b
und c
zu evalieren - einfach nicht, wie man es umgehen kann.Speichern einer Destrukturierungskarte für die spätere Verwendung
(def destructor {a :a b :b c :c})
; CompilerException java.lang.RuntimeException: Unable to resolve symbol: a in this context, compiling:(:1:15)
(let [destructor my-map]
'etc)
Ich habe eine ziemlich komplizierte Destrukturierung Karte, die ich verwende mehrmals unter Berücksichtigung, so schien es eine gute Idee, es irgendwo zu verstauen. Vielleicht gibt es bessere Möglichkeiten, das zu tun?
Die komisch aussehende '~‘ 'in der Let-Klausel ist so, dass a, b und cd on't Namespace-qualifiziert durch das Syntax-Zitat. Ich denke, es ist notwendig, aber ich bin gerade nicht an einem echten Computer, also wenn jemand sieht, dass es nicht leicht ist, zu editieren. – amalloy
Sehr nett. Ich kann '' keys'' nicht verwenden (gut, um es als Beispiel zu sehen), da ich "eine ziemlich involvierte Destrukturierungskarte" (d. H. Von vielen Ebenen) habe, aber das Tauschen in meiner Karte funktioniert großartig. Ich habe ein bisschen mit einem Makro gespielt, aber - obwohl ich schon viele Male erfolgreich war - habe ich immer noch nicht meinen Kopf dabei, alles zu überliefern und ein komplett neues, komplett verwandtes Ding zurück zu bekommen. Vielen Dank! –
@amalloy: Für die Aufzeichnung hast du recht - das '~ 'ist notwendig. Ich habe es getestet, und es funktioniert so wie es ist, aber das '~ 'herauszunehmen, verursacht eine' java.lang.RuntimeException: Kann keinen qualifizierten Namen geben: user/a'. –