En ruby para detectar un error, se usa la instrucción rescue
. en general, esta afirmación se produce entre begin
y end
. También se puede usar una instrucción rescue
como parte de un bloque (do ... end
) o un método (def ... end
). Mi pregunta es ¿qué otras estructuras (lazo, tiempo, si, ...) si alguien rescatará el nido dentro?En Ruby, ¿Qué estructuras puede anidar una instrucción `rescue` en
Respuesta
Sólo se puede utilizar de rescate en dos casos:
Dentro de un bloque
begin raise rescue nil end
begin ... end
Como modificador comunicadoi = raise rescue nil
función, Modul e, y los cuerpos de clase (gracias Jörg) son implícitos begin...end
bloques, por lo que puede rescatar dentro de cualquier función sin un explícito begin
/end
.
def foo
raise
rescue
nil
end
La forma de bloque tiene una lista opcional de parámetros, especificando qué excepciones (y descendientes) a 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 línea como un modificador de declaración, o sin argumento dentro de un begin
/end
bloque, rescate atrapará StandardError
and its descendants.
Aquí está el 1.9 documentation on rescue
.
los cuerpos de 'módulo' y' clase' son también bloques 'begin' implícitos. –
@ Jörg W Mittag: al igual que las definiciones de los métodos 'do ... end' y' def ... end'. ¿Hay algo más que sea un "comienzo" implícito? 'while',' case', o 'if' por ejemplo? –
@john - do ... end no es un comienzo implícito ... final. – klochner
- 1. No se puede anidar una instrucción de inserción de inserción
- 2. Ruby: Nils en una instrucción IF
- 3. comportamiento `var = something rescue nil`
- 4. ¿Anidar o no anidar?
- 5. Errores: "La declaración INSERT EXEC no se puede anidar". y "No se puede usar la instrucción ROLLBACK dentro de una instrucción INSERT-EXEC". ¿Cómo resolver esto?
- 6. Begin Rescue no detecta error
- 7. MongoDB/doctrine: no se puede anidar $ o en $ y
- 8. ¿Puede fallar alguna vez una instrucción COMMIT (en SQL)? ¿Cómo?
- 9. ¿Se puede anidar la expansión de parámetros en Bash?
- 10. ¿Cómo puede una instrucción tener both = y ==?
- 11. Ruby Exceptions - ¿Por qué "else"?
- 12. Estructuras de datos de árbol y gráfico en ruby
- 13. ¿Qué es una instrucción privilegiada?
- 14. ¿Qué es una instrucción JVM?
- 15. Estilo de si: anidar o no anidar
- 16. Puede/Debe arrojar excepciones en una instrucción C# switch?
- 17. No se puede ejecutar una instrucción COMPUTE
- 18. Cómo anidar repetidores en asp.net
- 19. ¿Puedo anidar en paralelo ::: parLapply()?
- 20. ¿Qué significa el carácter "$" en Ruby?
- 21. ¿Por qué dos? S en una instrucción IF al usar &&?
- 22. ¿Puedo anidar subrepos en Mercurial?
- 23. ¿Los raíles realizan una reversión si uso begin ... rescue?
- 24. sizeof() estructuras desconocidas. ¿Por qué?
- 25. Rails/Ruby: ¿Qué gema puede crear una imagen con texto?
- 26. C++: Almacenamiento de estructuras en una pila
- 27. estructuras Inicialización en C++
- 28. ¿Qué puede aprender JavaScript de Ruby?
- 29. ¿Por qué el 'BINARY' en una instrucción SELECT?
- 30. Encontrar una instrucción de impresión en Python
'do ... end' no se pueden rescatar bloques sin un' begin ... end' explícito. – Nick