traductor inglés ingles idiomas google good español crear como buscar exception-handling lua try-catch try-finally

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



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 ++.