En Ruby, ¿en qué estructuras se puede anidar una statement de ‘rescate’ en

En Ruby para atrapar un error se usa la statement de rescue . Generalmente esta afirmación ocurre entre el begin y el end . También se puede usar una statement de rescue como parte de un bloque ( do ... end ) o un método ( def ... end ). Mi pregunta es: ¿qué otras estructuras (loop, while, if, …) si alguna rescata nido?

Solo puedes usar rescate en dos casos:

  • Dentro de un bloque de begin ... end

     begin raise rescue nil end 
  • Como modificador de statement

     i = raise rescue nil 

Los cuerpos de funciones, módulos y clases (gracias a Jörg) son bloques implícitos de begin...end , por lo que puede rescatar dentro de cualquier función sin un begin / end explícito.

  def foo raise rescue nil end 

La forma de bloque toma una lista opcional de parámetros, especificando qué excepciones (y descendientes) rescue :

  begin eval string rescue SyntaxError, NameError => boom print "String doesn't compile: " + boom rescue StandardError => bang print "Error running script: " + bang end 

Si se llama en línea como un modificador de statement, o sin argumento dentro de un bloque de begin / end , el rescate detectará StandardError y sus descendientes .

Aquí está la documentación 1.9 sobre rescue .

    Intereting Posts