Curso de Raku / Objetos, entrada/salida y excepciones / Excepciones / Excepciones propias / Exercises / Demasiado grande
Solución: Demasiado grande
Aquí tienes una posible solución para la tarea.
Código
class TooBig is Exception {
has $.value;
has $.limit;
method message {
"Value $.value exceeds the limit of $.limit";
}
}
my $limit = 50;
for 30, 99, 60 -> $value {
TooBig.new(value => $value, limit => $limit).throw if $value > $limit;
say "Value $value is within the limit";
CATCH {
when TooBig {
say .message;
say "Try a value up to {.limit}.";
}
}
}🦋 Puedes encontrar el código fuente en el archivo too-big.raku.
Salida
Value 30 is within the limit
Value 99 exceeds the limit of 50
Try a value up to 50.
Value 60 exceeds the limit of 50
Try a value up to 50.Comentarios
TooBig is Exceptionconvierte la clase en una excepción lanzable. Lleva consigo dos datos,valueylimit, y su métodomessageteje ambos en el texto informado..throwlanza la excepción ywhen TooBigla empareja por tipo. El manejador hace algo más que imprimir el mensaje: lee el atributolimitdirectamente del objeto capturado para dar una pista útil. Esa es la ventaja de una excepción personalizada frente a una simple cadena: el manejador recibe datos estructurados sobre los que puede actuar.La excepción se lanza solo cuando
$value > $limit. Para30no se lanza ninguna excepción y el cuerpo del bucle llega hasta susay, informando de que el valor está dentro del límite. Para99y60se dispara elthrow, así que esesayse salta y de ello se ocupa elCATCH. El cuerpo delfores a su vez el bloque que elCATCHvigila, así que una excepción capturada solo termina la iteración actual y el bucle pasa entonces al valor siguiente.