2017-01-06 4 views
1

Я понимаю, что "msg" поле можно получить поКакова цель параметра «msg» для «ex-info»?

(.getMessage (ex-info "message" {:a 123})) 

Однако, я просто не вижу причину, по которой ExceptionInfo имеет msg поле. Ядро Clojure даже не обеспечивает надлежащего интерфейса для доступа к этому полю, например. (ex-msg (ex-info ...)).

У кого-нибудь есть пример, чтобы показать, как использовать это поле msg?

+2

Одна из причин, по которой это поле печатает исключения в журналах: '(log/error (ex-info« Boom! »{: Foo: bar})' => '... clojure.lang.ExceptionInfo: Boom! ... ' – OlegTheCat

+0

Возможно, они не добавили msg в возвращающуюся карту. –

ответ

1

В Java базовый класс Throwable, из которого распространяются все исключения, имеет поле detailMessage, а класс ExceptionInfo наследует его. JVM отобразит это сообщение при вызове исключения.

Таким образом, ex-info имеет сообщение, чтобы удовлетворить иерархию классов над ним и работать стандартными способами с Java и JVM. Типичным способом использования этого метода является использование стандартного вызова Java interop на .getMessage, как вы это делали в вопросе. Вы также увидите, что вы используете такие вещи, как pst.