【发布时间】:2023-04-09 12:00:02
【问题描述】:
我有这个示例代码,我在其中通过迭代映射的键值对来创建变量。
(defmacro block [bindings & body]
`(let [
~@(mapcat (fn [[k v]] [(if (symbol? k) k (symbol (name k))) `~v]) bindings) ]
~body))
(block {:a 1 :b 2} (if true (prn "true" a b) (prn "false")))
它工作正常。 输出:“真”1 2
但现在我想传递与 var 相同的映射,但它会抛出异常。
IllegalArgumentException 不知道如何从:clojure.lang.Symbol 创建 ISeq
(def ctx {:a 3 :b 4})
(block ctx (if true (prn "true" a b) (prn "false")))
【问题讨论】:
标签: clojure