2

我有一个应用程序,它通过prn. 日志中的人为条目可能是:

{: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*)?

4

1 回答 1

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,但希望你能明白。)

于 2013-09-16T16:38:23.003 回答