如何访问`clojure.lang.Compiler $ CompilerException`实例的行变量?

时间:2013-06-20 01:21:51

标签: exception-handling clojure introspection

尝试访问line实例的clojure.lang.Compiler$CompilerException变量失败,但当我检查the code异常时,我可以清楚地看到行变量存在。例如:

user=> (try
  #_=>   (load-string "(+ 2 3)\n(- 3 4)\n())")
  #_=>   (catch clojure.lang.Compiler$CompilerException er
  #_=>     (. er line)))
IllegalArgumentException No matching field found: line for class clojure.lang.Compiler$CompilerException  clojure.lang.Reflector.getInstanceField (Reflector.java:271)

当我改为期望3成为结果时。

不访问line变量,只是返回异常实际上显示了该行!

user=> (try
  #_=>   (load-string "(+ 2 3)\n(- 3 4)\n())")
  #_=>   (catch clojure.lang.Compiler$CompilerException er
  #_=>     er))
#<CompilerException java.lang.RuntimeException: Unmatched delimiter: ), compiling:(null:3)>

发生了什么事?

编辑:在clojure 1.4.0上使用

1 个答案:

答案 0 :(得分:4)

在关闭this commitCLJ-788中的1.5.0之前未添加该行成员。

您必须更新为 Clojure 1.5.0 才能访问此会员。