我正在学习Clojure,我发现很难理解特定编译器错误发生的位置。
java.lang.ClassCastException: java.lang.Long cannot be cast to
clojure.lang.IPersistentCollection, compiling:(fwpd/core.clj:100:1)
第100行只是:
(fib-seq3 5)
因为实际上错误出现在fib-seq3函数中(“conj”调用的参数被倒置了,请参见下文),所以它什么也没有说。
这是正常的吗?无法知道错误在哪里吗???
仅供参考,以下是代码(再次强调,我知道错误在哪里;我只是不明白应该如何找到它,因为信息并没有告诉我发生在哪一行):
(defn fib-seq3
([to]
(fib-seq3 [] 0 1 0 to))
([coll a b k to]
(if (= k to)
coll
(fib-seq3 (conj b coll) b (+ a b) (inc k) to)))
(fib-seq3 5)
at stacktraces.core$make_sandwich.invoke(core.clj:4) at stacktraces.core$_main.invoke(core.clj:7)
,而我却在调用函数行上遇到了错误...而不是在被调用函数行上。 - Leoclojure.stacktrace
命名空间下的(print-cause-trace *e)
来打印完整的错误信息跟踪。 - Leonid Beschastny(.printStackTrace *e)
。不要打印原因跟踪:您和堆栈跟踪之间插入的每个工具层都是在事情已经出错时可能会出现问题的另一件事。 - amalloy