Clojure 如何从传递的参数在宏中创建符号
只是尝试宏的限制或未知,我无法在运行时使用更改的键对符号映射进行固定长度。Clojure 如何从传递的参数在宏中创建符号,clojure,Clojure,只是尝试宏的限制或未知,我无法在运行时使用更改的键对符号映射进行固定长度。 因此,当k1 k2作为参数传递给进程arity时,它应该创建j1 j2符号,用于从map宏访问syms中的k1和k2值。 给出编译错误: CompilerException java.lang.IllegalArgumentException:不知道如何从clojure.core$map创建ISeq 引用-取消引用使编写宏变得困难:-( macroexpand-1是一个很有价值的工具。请使用它 (defmacro pro
因此,当k1 k2作为参数传递给进程arity时,它应该创建j1 j2符号,用于从map宏访问syms中的k1和k2值。
给出编译错误:
CompilerException java.lang.IllegalArgumentException:不知道如何从clojure.core$map创建ISeq
引用-取消引用使编写宏变得困难:-(
macroexpand-1
是一个很有价值的工具。请使用它
(defmacro process-arity[args]
`(let [] (fn ~args
(let [~'map1 (zipmap [~'j1 ~'j2] ~args)]
(syms-from-map ~'map1)))))
(符号来自地图~'map1)
无法按您期望的方式工作。我建议您将其转换为函数。这些模糊的宏问题从何而来?这是偶然的,还是thaybis建议每个人都去宏野生?如果我生成j1、j2符号,通过将其转换为函数,这些符号如何从ma从符号传递到其他宏p fn?
(defmacro process-arity[args]
`(let [] (fn ~args
(let [~'map1 (zipmap [~'j1 ~'j2] ~args)]
(syms-from-map ~'map1)))))