exception-handling - inglés - release traductor google
Cómo simular try-finally o try-excepto en idiomas que no los tienen (4)
¿Hay alguna forma de simular una try-finally
o try-except
en un idioma que no las tiene?
Si hay algo aleatorio, impredecible, sucede una excepción, necesito estar seguro de que se ejecuta una limpieza.
Podría intentar estar seguro de que no hay excepción en el lanzamiento, de esa manera estoy seguro de que mi código de limpieza siempre se ejecuta, pero entonces no necesitaría el try-finally/except
.
Justo en este momento estoy intentando crear una try-finally
en Lua; pero creo que cualquier solución también funcionaría en otros idiomas.
Aunque, por mi vida, no puedo entender cómo se puede manejar una excepción sin las tuberías provistas por la infraestructura del lenguaje.
Pero nunca duele preguntar
¿Qué tal este sistema de manejo de excepciones Lua ? También puedes usar los mecanismos Lua RAII .
En general, las excepciones se pueden capturar utilizando la función de señal (). Sin embargo, no estoy seguro de que lua pueda soportarlo. En C, eso es lo que usarías. ¡Y eso es una gran molestia! (algo complicado)
Lua ya tiene los mecanismos necesarios para hacer algo no del todo diferente a las excepciones. A saber, pcall
.
Puede usar pcall
para ejecutar cualquier función Lua. Si esa función (o cualquier función a la que llama) invoca el error
( assert
error
llamadas si la condición de aserción no es verdadera), entonces el control de flujo regresará al sitio de la instrucción pcall
. El pcall
devolverá falso y un mensaje de error (lo que se pasa al error
).
Con esto, puedes "lanzar" errores y "atraparlos". Tu "intento" es solo el pcall
; su declaración de "captura" es lo que verifica el resultado de pcall
.
Además, recuerde: Lua es un entorno recolectado de basura. No deberías necesitar hacer ningún trabajo de limpieza. O si lo hace, debe cambiar el módulo Lua que lo requiera. Las API de Lua deben ser API de Lua, no API de C o C ++.
Nunca programado en lua (que es lo que tiene etiquetado como). Sin embargo, varias páginas web, incluida esta http://jessewarden.com/2011/01/lua-for-actionscript-developers.html mencionaron que la llamada protegida (pcall) es un dispositivo de manejo de errores de lua.
Espero que esto ayude.