clojure宏扩展重复代码
clojure macro expand repeated code
我一直在尝试用 clojure 宏做一些可能很基本的事情。我将示例简化为下面的最小值。假设我有:
(def a {:i 0})
我想将 b 定义为:
(def b (my-func a a a a a a ... a a a a))
在编译时,我知道我想要多少a
(例如3)。但是为了去除代码冗余,为了更好的代码,我想参数化a
的数量。我想要这样的东西:
(def b (my-func (some-magic-macro 3 a)))
会扩展到
(def b (my-func a a a))
用 macrodef、repeat、quoting 等尝试了很多东西...由于我现阶段对 clojure 的理解有限,但没有取得太大成功
谢谢大家!
作为宏 return 的单一形式,您不能制作 my-magic-macro
return 多个参数副本以供 my-func
使用。但是,您可以包含 my-func
作为 my-magic-macro
的参数,并进行完整调用 returned:
(defmacro my-magic-macro [func arg n] `(~func ~@(repeat n arg)))
我一直在尝试用 clojure 宏做一些可能很基本的事情。我将示例简化为下面的最小值。假设我有:
(def a {:i 0})
我想将 b 定义为:
(def b (my-func a a a a a a ... a a a a))
在编译时,我知道我想要多少a
(例如3)。但是为了去除代码冗余,为了更好的代码,我想参数化a
的数量。我想要这样的东西:
(def b (my-func (some-magic-macro 3 a)))
会扩展到
(def b (my-func a a a))
用 macrodef、repeat、quoting 等尝试了很多东西...由于我现阶段对 clojure 的理解有限,但没有取得太大成功
谢谢大家!
作为宏 return 的单一形式,您不能制作 my-magic-macro
return 多个参数副本以供 my-func
使用。但是,您可以包含 my-func
作为 my-magic-macro
的参数,并进行完整调用 returned:
(defmacro my-magic-macro [func arg n] `(~func ~@(repeat n arg)))