2009-03-30 9 views
5

Mam dostęp do hierarchii wyjątków ruby ​​(jest ona wymieniona zarówno w kilofie, jak iw koliber), ale nie jestem pewien, którego wyjątku użyć, ponieważ nie znalazłem żadnej informacji o tym, co terminów oznacza.Używanie właściwej podklasy wyjątków w rubinie

Czy korzystanie z właściwej klasy wyjątków ma znaczenie?

+0

Właśnie natknąłem się na opis klas wyjątków pod adresem http://redmine.ruby-lang.org/projects/ruby/wiki/ExceptionClassesDoc –

Odpowiedz

8

"To zależy".

Jednym z głównych problemów z Ruby jest brak dobrej specyfikacji. Jednak było gorzej.

Jest to głównie kwestia stylu: jeśli Twój błąd można dobrze opisać za pomocą jednej z wbudowanych klas wyjątków, użyj go. Jeśli uważasz, że podklasa ma sens, użyj jej.

W przeciwnym razie, można rozważyć podążać :

Tworzenie bardzo skomplikowany wyjątek hierarchie to strata czasu. Nikt koniec opieki i cały wysiłek idzie do marnowania. Zamiast tego należy utworzyć wyjątek dla biblioteki lub przestrzeni nazw i mieć wyjątek wyjątku w tym wyjątku od , aby wskazać typ wyjątku .

Na przykład w przypadku enkapsulacji systemu operacyjnego zrób wyjątek o nazwie OsencapException.

+1

Zamiast tworzyć jeden wyjątek na bibliotekę, sugerowałbym utworzenie jednego wyjątku dla każdego warunku chcesz złapać. Możesz domyślnie używać RuntimeError, a gdy wykryjesz, że myślisz o przeanalizowaniu komunikatu o błędzie w bloku ratunkowym, utwórz nową klasę. – Arsen7

1

nr

Albo raczej, czy to nie ma znaczenia do ciebie, to generalnie nie ma znaczenia dla nikogo innego. Jeśli piszesz bibliotekę, powinieneś użyć czegoś, co zrozumieją użytkownicy Twojej biblioteki, ale to wszystko.

10

Ma znaczenie przy tworzeniu własnych wyjątków. Jednym ważnym zastrzeżeniem jest to, że wyjątki, które dziedziczą po prostu od Exception zamiast StandardError (zwykły błąd), nie zostaną przechwycone przez ratowanie (bez żadnych argumentów).

+8

Oznacza to, że każda klasa Wyjątek powinna zawsze dziedziczyć ze StandardError, nigdy bezpośrednio z wyjątku. Myślę, że mógłbyś uczynić to nieco jaśniejszym ... –

Powiązane problemy