3
在調試的較大功能的過程中,我創建了一個更簡單的函數來測試,其中的錯誤是:我有一個包含3個函數的Clojure seq。爲什麼(rest my-seq)給出「不能作爲」異常?
(defn foo [a-val p1 p2 & rest]
(loop [curr-preds (cons p1 (cons p2 rest))]
(let [first-pred (first curr-preds)
first-bool (first-pred a-val)
second-bool ((second curr-preds) a-val)
third-bool ((last curr-preds) a-val)]
(println "\n\nLogical values: " first-bool second-bool third-bool)
(println "Is it a seq?" (seq? curr-preds))
(if (empty? curr-preds)
first-bool
#_(recur (rest curr-preds))
))))
P1,P2,和功能於其餘集合都是謂詞(例如,奇數?) 。我寫這篇文章的期望是它總是被稱爲3個謂詞。
當我拿出在#_
下一個到最後一行,我得到以下錯誤:
java.lang.ClassCastException: clojure.lang.ArraySeq cannot be cast to clojure.lang.IFn
/Users/gr/temp/LTtemp1.clj:166 user/foo
RestFn.java:467 clojure.lang.RestFn.invoke
通過println
聲明,我發現:
curr- preds是包含3個謂詞的
seq
,如預期的那樣調用每個pred
a-val
倍的回報預期的結果curr-preds
,其實,一個seq
我的問題:rest
被定義爲在seqs工作,所以爲什麼我得到上面不能待投的錯誤?謝謝。
哎唷!我很尷尬,我犯了這個錯誤......以及我一直試圖解決這個問題的時間。現在我可以繼續下一個錯誤....非常感謝。 –
每個人都會犯這個錯誤至少一次。當你做了十幾次,那麼你可能會感到尷尬。 – amalloy