Как сообщить об ошибке из конструктора Moose? - PullRequest
1 голос
/ 10 августа 2011

У меня есть класс, который читает конфигурацию. Теперь проблема в том, что я не знаю, как сообщать об ошибках из этого класса.

Использование die недостаточно, поскольку конфигурация параметрическая, а ошибки являются общими.

Ситуация осложняется тем, что я вызываю функцию чтения в методе Moose BUILD. Поскольку это использование значительно улучшает читабельность при использовании класса, я бы хотел сохранить его таким образом.

Ответы [ 2 ]

1 голос
/ 10 августа 2011

Возможно, вы захотите взглянуть на Карп для его функции croak(). Из его документации:

Процедуры Carp полезны в ваших собственных модулях, потому что они действуют как die () или warn (), но с сообщением, которое более вероятно будет полезным пользователю вашего модуля. В случае бреда, признаться, и longmess этот контекст является сводкой каждого вызова в стеке вызовов. Для более короткое сообщение, вы можете использовать карпа или каркают, которые сообщают об ошибке как находясь там, где был назван ваш модуль.

При использовании вместе с Try :: Tiny вы получите более мощное, гибкое и описательное решение, чем сопоставление старого доброго штампа с eval. Вам не нужно беспокоиться о крайних случаях, например, когда $ @ предоставляет неверную информацию. И ваши исключения могут быть более точными описательными, а также более подробными. С помощью Carp вы даже можете заставить своих хулиганов вести себя как признание, предоставляя подробную трассировку стека, которая упрощает точное определение места возникновения проблемы.

1 голос
/ 10 августа 2011

Что не так с die? Выдает исключение, которое вы можете захватить и обработать по мере необходимости. На самом деле Moose сам генерирует исключение при ошибках валидации.

...