【发布时间】:2019-03-02 04:58:27
【问题描述】:
只是尝试宏限制或未知数,我无法在运行时使用更改的键对符号映射进行固定的透镜。
因此,当 k1 k2 作为 args 传递给 process-arity 时,它应该创建 j1 j2 符号来访问 syms-from-map 宏中的 k1 和 k2 值。
给出编译错误:
CompilerException java.lang.IllegalArgumentException:不知道如何从:clojure.core$map
创建 ISeq
引用取消引用使编写宏变得困难:-(
(defmacro syms-from-map[m]
`(let [~@(mapcat (fn[[k v]] [k v]) (var-get (resolve m)))]
(prn "got" ~'j1 ~'j2))
)
(defmacro process-arity[args]
`(let [] (fn ~args
(let [~'map1 (zipmap '[j1 j2] ~args)]
(syms-from-map ~'map1)
))))
(def test-m1 (process-arity [k1 k2]))
(apply test-m1 [1 2])
【问题讨论】:
-
这些晦涩的宏观问题从何而来?是偶然的,还是有什么课程或什么 thaybis 建议每个人都去宏观狂野?
标签: clojure