我已經在clojure中編寫了這個多功能函數。使用defmulti調度功能的問題
(defmulti printlmt (fn [s] (> (count s) 10)))
(defmethod printlmt true [s] (println s))
(defmethod printlmt false [s] (println (take 10 s)))
然後我嘗試如下執行它..
(printlmt "test")
不過,我不斷收到以下錯誤。
IllegalArgumentException No method in multimethod 'printlmt' for dispatch value: 4 clojure.lang.MultiFn.getFn (MultiFn.java:156)
在我的理解中,匿名函數應返回值true
。爲什麼匿名函數返回4?
如果我單獨叫調度功能,這樣
((fn [s] (> (count s) 0)) "test")
在這種情況下,它會返回true
!
編輯: 我加入,我有終端文本:
startingclojure.core=> (defmulti printlmt (fn [s] (> (count s) 10)))
nil
startingclojure.core=> (defmethod printlmt true [s] (println s))
#object[clojure.lang.MultiFn 0x3315fe88 "[email protected]"]
startingclojure.core=> (defmethod printlmt false [s] (println (take 10 s)))
#object[clojure.lang.MultiFn 0x3315fe88 "[email protected]"]
startingclojure.core=>
startingclojure.core=> (printlmt "test")
IllegalArgumentException No method in multimethod 'printlmt' for dispatch value: 4 clojure.lang.MultiFn.getFn (MultiFn.java:156)
startingclojure.core=>
我的代碼適用於我 – Lee
@Lee我添加了實際的控制檯文本。你能否看看是否有什麼問題。 – Teddy
這兩個代碼都沒有問題。你有沒有試過退出然後重新啓動repl?愚蠢的問題,但也許是一箇舊的printlmt錯誤定義仍然在這裏 –