Kurso de Raku / Objektoj, en- kaj eligo kaj escepto / Esceptoj

Propraj esceptoj

Krom la enkonstruitaj esceptoj X::, vi povas difini viajn proprajn. Propra escepto estas klaso, kiu heredas de la enkonstruita klaso Exception kaj provizas metodon message:

class TooBig is Exception {
    has $.value;

    method message {
        "Value $.value is too big";
    }
}

TooBig estas normala klaso — ĝi povas havi atributojn kiel value — sed ĉar ĝi is Exception, ĝi povas esti ĵetata. Vi ĵetas ĝin kreante objekton kaj vokante .throw sur ĝi:

my $value = 20 * 30;

TooBig.new(value => $value).throw if $value > 50;

CATCH {
    when TooBig {
        say .message;
    }
}

La programo presas:

Value 600 is too big

Ene de la CATCH, when TooBig kongruas, ĉar la ĵetita objekto estas de tiu tipo. Propra escepto portas kiajn ajn datumojn vi donas al ĝi (ĉi tie, la value), do la traktilo povas konstrui precizan mesaĝon aŭ reagi laŭ specifa maniero — multe pli utile ol simpla ĉeno transdonita al die.

Ĉi tio kunigas ĉion en ĉi tiu parto: propra escepto estas klaso (kun atributoj kaj metodo), kiu partoprenas en la escepta maŝinaro, preta signali ĝuste tion, kio misiris.

Praktiko

Vin atendas 1 kvizo pri la enhavo de ĉi tiu temo.

Ekzercoj

En ĉi tiu sekcio estas 3 ekzercoj. Trarigardu ĉiujn temojn de ĉi tiu sekcio antaŭ ol komenci la ekzercojn.

  1. Tro granda
  2. Eraro pri negativa nombro
  3. Du esceptotipoj

Kursa navigado

Kvizo — fail   |   Tro granda