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