评论由:scottbale
对不起,我应该提到这一点,因为这对我也不是很明显(实际上我直到刚才才想起):RuntimeException 已经被捕获并封装在 CompilerException 中。
我不确定这一点发生在 Compiler.java 中的哪个 try-catch 块中,因为有很多。但您可以在输出中看到异常是 CompilerException,并且文件/行/列信息就在那里。
在 Repl...
user> (def foo/bar 1) CompilerException java.lang.RuntimeException: Qualified symbol foo/bar refers to nonexistent namespace: foo, compiling:(NO_SOURCE_PATH:1:1)
...或者在源文件中
user=> CompilerException java.lang.RuntimeException: 符号 goo/bar 没有找到对应的命名空间:goo,编译中:( /home/scott/dev/foo.clj:3:1 )
此外,在这个补丁的 RuntimeException 被抛出的地方,CompilerException 的 {{source}} {{line}} 和 {{col}} 参数不可用,或者至少据我所知是这样。