定义Clojure哈希图而不重复标记

Define clojure hash map without duplicating tokens

我想返回一个哈希映射,如下所示:

1
(fn [foo bar] {:foo foo :bar bar})

是否可以在不重复名称的情况下做到这一点? let如何允许此内容:

1
2
(let [{:keys [foo bar]} args]
   (...))


1
(defmacro as-keymap [& names] `(conj {} ~@(map (juxt keyword symbol) names)))

宏:

1
2
(defmacro some-hash-thing [& vals]
  (zipmap (map keyword vals) vals))

使用中:

1
2
3
(let [a 4, b 5]
  (some-hash-thing b a))
;; => {:a 4, :b 5}