Una excepción es un objeto de la clase Exception o un hijo de esa clase. Las excepciones ocurren cuando el programa alcanza un estado en su ejecución que no está definido. Ahora el programa no sabe qué hacer, por lo que genera una excepción. Esto se puede hacer automáticamente por Ruby o manualmente. Catch and Throw son palabras clave similares para aumentar y rescatar , las excepciones también se pueden manejar usando palabras clave de captura y lanzamiento en Ruby. La palabra clave Throw genera una excepción y cada vez que se cumple, el control del programa pasa a la instrucción catch.
Sintaxis:
catch :lable_name do # matching catch will be executed when the throw block encounter throw :lable_name condition # this block will not be executed end
El bloque catch se usa para saltar del bloque anidado y el bloque se etiqueta con un nombre. Este bloque funciona normalmente hasta que se encuentra con el bloque de lanzamiento, por lo que se usa atrapar y lanzar en lugar de levantar o rescatar.
Ejemplo 1:
# Ruby Program of Catch and Throw Exception gfg = catch(:divide) do # a code block of catch similar to begin number = rand(2) throw :divide if number == 0 number # set gfg = number if # no exception is thrown end puts gfg
Producción :
En el ejemplo anterior, si el número es 0, se lanza la excepción: dividir, que no devuelve nada a la instrucción catch, lo que resulta en «»establecido en gfg. si el número es 1, entonces no se lanza la excepción y la variable gfg se establece en 1.
Ejemplo #2: lanzamiento con valor predeterminado.
En el ejemplo anterior, cuando se lanzó la excepción, el valor de la variable gfg se estableció en «». podemos cambiar eso pasando el argumento predeterminado a la palabra clave throw.
# Ruby Program of Catch and Throw Exception gfg = catch(:divide) do # a code block of catch similar to begin number = rand(2) throw :divide, 10 if number == 0 number # set gfg = number if # no exception is thrown end puts gfg
Producción :
10
En el ejemplo anterior, si el número es 0, obtenemos 10. Si el número es 1, obtenemos 1.
Ejemplo 3: ejemplo de construcción anidada, aquí veremos cómo podemos saltar de construcciones anidadas.
# Ruby Program of Catch and Throw Exception gfg = catch(:divide) do # a code block of catch similar to begin 100.times do 100.times do 100.times do number = rand(10000) # comes out of all of the loops # and goes to catch statement throw :divide, 10 if number == 0 end end end number # set gfg = number if # no exception is thrown end puts gfg
Producción :
10
si el número es 0 incluso una vez en los bucles, obtenemos 10; de lo contrario, obtenemos el número.