使用Clojure阅读器忽略未解析的符号

时间:2013-09-16 15:09:38

标签: clojure

我有一个应用程序,可以通过prn将Clojure地图记录到日志文件中。来自日志的设计条目可能是:

{:foo "bar" 
 :baz [:quux] 
 :body #<HttpInput org.eclipse.jetty.server.HttpInput@2a4bd173>}

我希望能够将其粘贴到repl中以检查“简单”键和值,但读者会在#<值上窒息。

CompilerException java.lang.RuntimeException:
  Unable to resolve symbol: HttpInput in this context

我不关心#<值。有没有办法让读者忽略它们,或者让我有机会直接处理它们(有点像*data-readers*)?

1 个答案:

答案 0 :(得分:3)

据我所知,如果不手动编辑日志输出,就无法使这个输入与阅读器一起工作。 prn对于无法识别的数据类型的默认行为是输出以下格式:

#<(.getSimpleName (class o)) (str o)>

#字符表示读取器宏,它调度以下字符,<字符表示不可读的格式;读者在遇到这种情况时总会抛出异常。

您最好的选择可能是更改应用程序的日志记录,打印更具可读性的内容。一种方法是为目标类提供print-method多方法的实现,例如:

(defmethod print-method org.eclipse.jetty.server.HttpInput [o w]
  (print-method {:type "HttpInput"
                 :request-uri (-> o ._connection .getRequest .getUri str)}
                w))

(这可能不适用于受保护的字段_connection,但希望您能了解到这一点。)