開始編輯:爲什麼Clojure defmulti調度函數接收0個參數?
Mea Culpa!我道歉。
我在Clojure 1.2.1的cake repl中運行了它,它老實說沒有工作。現在它退出蛋糕repl和蛋糕編譯後,它也在1.3.0工作。
末編輯:
在下面:我的調度功能被傳遞零個ARGS,但我想不出爲什麼。我已經測試了調度功能,並且它完成了它應有的功能。我將不勝感激任何建議。
(defrecord AcctInfo [acct-type int-val cur-bal])
(def acct-info (AcctInfo. \C 0.02 100.00))
ba1-app=> acct-info
ba1_app.AcctInfo{:acct-type \C, :int-val 0.02, :cur-bal 100.0}
(defn get-int-calc-tag [acct-type]
(cond (= acct-type \C) :checking
(= acct-type \S) :savings
(= acct-type \M) :moneym
:else :unknown))
(defmulti calc-int (fn [acct-info] (get-int-calc-tag (:acct-type acct-info))))
(defmethod calc-int :checking [acct-info] (* (:cur-bal acct-info) (:int-val acct-info)))
ba1-app=> (get-int-calc-tag (:acct-type acct-info))
:checking
ba1-app=> (calc-int acct-info)
java.lang.IllegalArgumentException: Wrong number of args (0) passed to: ba1-app$get-int-calc-tag
將您的代碼複製並粘貼到乾淨的repl中不會產生您報告的錯誤。它運行並返回值2.0。 – 2011-12-19 17:45:01
謝謝。我試過了,並得到了錯誤,所以也許這是Clojure版本相關?再次嘗試Clojure 1.3,它的工作。 – octopusgrabbus 2011-12-19 17:46:04
在1.2.1 repl嘗試,工作正常 – skuro 2011-12-19 18:01:43