2
在我正在進行的Clojure練習中,我有幾種多方法,所有這些都只是使用identity
作爲調度功能。例如:Clojure:從符號列表中定義multimethods?
(defmulti amount identity)
(defmulti bottles identity)
(defmulti pronoun identity)
(defmulti action identity)
(defmulti pred identity)
因爲他們都使用派遣相同identity
功能,我想只遍歷名稱,並呼籲defmulti
每個名稱,而不是重複defmulti
調用。我嘗試這樣做:
(doseq [m '(amount bottles pronoun action pred)]
(defmulti m identity))
然而,當我這樣做,它彷彿在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)
是否有可能遍歷符號或名稱列表,併爲它們中的每個名稱調用defmulti
,如果是的話如何實現?
由於'defmulti'是一個宏它被符號'M'作爲第一個參數,而不是在綁定的值'doseq'。 'doseq'實際上正在做的是多次定義多方法'm'。 –