2009-03-30 7 views
5

Ho accesso alla gerarchia delle eccezioni di Ruby (è menzionata sia nel piccone che nel colibrì), ma non sono sicuro di quale eccezione utilizzare perché non ho trovato alcuna informazione su cosa dei termini significa.Uso della sottoclasse di eccezioni di destra in rubino

L'utilizzo della giusta classe di eccezioni è importante?

+0

Ho appena trovato una descrizione delle classi di eccezioni su http://redmine.ruby-lang.org/projects/ruby/wiki/ExceptionClassesDoc –

risposta

8

"Dipende".

Uno dei problemi principali con Ruby è la mancanza di specifiche valide. Era peggio, però.

Questa è principalmente una questione di stile: se il tuo errore può essere descritto bene con una delle classi di eccezioni incorporate, usalo. Se pensi che una sottoclasse abbia senso, usala.

In caso contrario, si potrebbe considerare di seguire :

Creazione di eccezione molto elaborato gerarchie è una perdita di tempo. Nessuno fine della cura e tutto lo sforzo va di sprecare. Invece, creare un'eccezione per libreria o spazio dei nomi e hanno un motivo di eccezione all'interno dell'eccezione per indicare il tipo di eccezione .

Ad esempio, per la tua libreria OS incapsulamento , creare un'eccezione denominata OsencapException.

+1

Invece di creare un'eccezione per libreria, suggerirei di creare un'eccezione per ogni condizione vuoi prendere. È possibile utilizzare un RuntimeError per impostazione predefinita e quando si rileva che si pensa di analizzare il messaggio di errore in un blocco di salvataggio, creare una nuova classe. – Arsen7

1

No.

O meglio, se non importa a te, in genere non importa a nessuno. Se stai scrivendo una biblioteca, dovresti usare qualcosa che gli utenti della tua biblioteca capiranno, ma questo è tutto.

10

È importante quando si creano le proprie eccezioni. Un avvertimento importante è che le eccezioni che ereditano da Exception piuttosto che StandardError (errore comune) non verranno rilevate da rescue (senza argomenti).

+8

Ciò significa che qualsiasi classe Exception creata deve sempre ereditare da StandardError, mai direttamente da Exception. Penso che avresti potuto renderlo un po 'più chiaro ... –