Jas*_*ele 2 clojure multimethod
在我正在进行的Clojure练习中,我有几个多方法,所有这些方法都只identity用作调度函数.例如:
(defmulti amount identity)
(defmulti bottles identity)
(defmulti pronoun identity)
(defmulti action identity)
(defmulti pred identity)
Run Code Online (Sandbox Code Playgroud)
由于它们都使用相同的identity函数进行调度,我想迭代名称并调用defmulti每个名称而不是重复defmulti调用.我试过这个:
(doseq [m '(amount bottles pronoun action pred)]
(defmulti m identity))
Run Code Online (Sandbox Code Playgroud)
但是,当我这样做时,似乎defmulti没有正确的效果,就像我后来defmethod用于任何多方法名称时,我得到一个错误,如:
(defmethod amount 0 [n] "whatever")
CompilerException java.lang.RuntimeException: Unable to resolve symbol: amount in this context, compiling:(NO_SOURCE_PATH:1:1)
Run Code Online (Sandbox Code Playgroud)
是否有可能迭代一个符号或名称列表并调用defmulti它们中的每一个,如果是这样,它怎么能完成?
您可以创建一个包装defmulti并执行所需操作的宏:
(defmacro defidmulti [names]
`(do ~@(for [m names]
`(defmulti ~m identity))))
(defidmulti [amount bottles pronoun action pred])
Run Code Online (Sandbox Code Playgroud)