Ok, concrete.
Here's one mistake I made the other day. I created a ref, and then
forgot to access it using @. The example code is
(def my_map (ref {:a 1, :b 2}))
(def map_vals (vals my_map))
$ java -cp clojure-clean.jar clojure.lang.Repl bad-ref.clj
java.lang.IllegalArgumentException: Don't know how to create ISeq
from: Ref
at clojure.lang.RT.seqFrom(RT.java:465)
at clojure.lang.RT.seq(RT.java:448)
at clojure.lang.RT.vals(RT.java:473)
at clojure.vals__470.invoke(boot.clj:893)
at clojure.lang.AFn.applyToHelper(AFn.java:184)
at clojure.lang.AFn.applyTo(AFn.java:175)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:2589)
at clojure.lang.Compiler$DefExpr.eval(Compiler.java:282)
at clojure.lang.Compiler.eval(Compiler.java:3896)
at clojure.lang.Compiler.load(Compiler.java:4192)
at clojure.lang.Compiler.loadFile(Compiler.java:4159)
at clojure.lang.Repl.main(Repl.java:48)
And then here's the stack trace from the real code:
java.lang.IllegalArgumentException: Don't know how to create ISeq
from: Ref
at clojure.lang.RT.seqFrom(RT.java:465)
at clojure.lang.RT.seq(RT.java:448)
at clojure.lang.RT.vals(RT.java:473)
at clojure.vals__470.invoke(boot.clj:893)
at clojure.lang.AFn.applyToHelper(AFn.java:184)
at clojure.lang.AFn.applyTo(AFn.java:175)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:2589)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:2588)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:2588)
at clojure.lang.Compiler$DefExpr.eval(Compiler.java:282)
at clojure.lang.Compiler.eval(Compiler.java:3896)
at clojure.lang.Compiler.load(Compiler.java:4196)
at clojure.lang.RT.loadResourceScript(RT.java:360)
at clojure.lang.RT.loadResourceScript(RT.java:347)
at clojure.lang.RT.loadResourceScript(RT.java:339)
at clojure.load__1722$fn__1724.invoke(boot.clj:3195)
at clojure.load__1722.doInvoke(boot.clj:3194)
at clojure.lang.RestFn.invoke(RestFn.java:413)
at clojure.load_one__1685.invoke(boot.clj:3041)
at clojure.load_lib__1705.doInvoke(boot.clj:3078)
at clojure.lang.RestFn.applyTo(RestFn.java:147)
at clojure.apply__135.doInvoke(boot.clj:364)
at clojure.lang.RestFn.invoke(RestFn.java:443)
at clojure.load_libs__1709.doInvoke(boot.clj:3104)
at clojure.lang.RestFn.applyTo(RestFn.java:142)
at clojure.apply__135.doInvoke(boot.clj:364)
at clojure.lang.RestFn.invoke(RestFn.java:443)
at clojure.require__1713.doInvoke(boot.clj:3163)
at clojure.lang.RestFn.invoke(RestFn.java:413)
at user.eval__3155.invoke(start.clj:5)
at clojure.lang.Compiler.eval(Compiler.java:3891)
at clojure.lang.Compiler.load(Compiler.java:4196)
at clojure.lang.Compiler.loadFile(Compiler.java:4163)
at clojure.lang.Repl.main(Repl.java:48)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:
39)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:
25)
at java.lang.reflect.Method.invoke(Method.java:585)
at jline.ConsoleRunner.main(ConsoleRunner.java:69)
Clojure
user=>
The real code is complicated by the fact that I required several
files. If you pay attention to the stack trace, you see that the code
entered at start.clj. Then three files were required, but you can't
tell which file or line blew up.