Nicht wirklich, und es wäre keine gute Idee. Stellen Sie sich vor:
%Vor%Sind foo und bar globals? Einheimische? Schlüssel, die Sie aus m extrahieren sollten? Was sollte dieser Code tun, wenn m manchmal einen foo-Schlüssel enthält und foo auch eine globale Funktion ist? Manchmal rufst du das globale an und manchmal rufst du die in m gespeicherte Funktion auf?
Ignorieren Sie die technischen Probleme (von denen die meisten wahrscheinlich überwunden werden können), ist es wirklich ein Desaster für Lesbarkeit und Vorhersagbarkeit. Sei nur klar darüber, welche Schlüssel du herausziehen möchtest; Wenn Sie häufig die gleichen zehn Schlüssel ziehen möchten, können Sie ein einfaches Makro wie (with-person p body)
schreiben, das diesen allgemeinen Fall für Sie vereinfacht.
Diese Frage ist ziemlich alt, also hast du sie wahrscheinlich vergessen, aber sie ist auf Google aufgetaucht, als ich versucht habe, dasselbe zu tun. Wenn ich also meine Lösung poste, könnte das jemand anderem helfen.
%Vor% Dies transformiert im Grunde die Map {:cpp 88 :js 90}
in die bindende Form [cpp 88 js 90]
und erstellt dann eine let
-Bindung, zusammen mit einigen Eval-Jitsu, um sicherzustellen, dass dies zur Laufzeit geschieht.
Sie könnten dafür ein Makro schreiben (effektiv ein Mini-DSL erstellen), aber ich denke nicht, dass es aus folgenden Gründen eine sehr gute Idee ist:
Ich würde empfehlen, in Ihrem Fall einfach einen einfachen doseq zu verwenden, um die Karte zu durchlaufen:
%Vor%Beachten Sie Folgendes:
k
als auch den Wert v
von jedem Karteneintrag Tags und Links clojure