Gestión del estado y los errores
Utilice lua_pcall para realizar llamadas protegidas y gestione los errores en la capa C.
Gestión del estado y los errores es una lección gratuita de Lua Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Lua Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Lua Academy incluye 4 lecciones en total.
Múltiples estados de Lua
Puede ejecutar varias instancias de lua_State en el mismo proceso. Cada una es completamente independiente: tiene globales y pilas separadas, y no comparte memoria de forma predeterminada.
Estados de hilos
lua_newthread(L) crea un hilo secundario (coroutine) que comparte el mismo entorno global, pero tiene su propia pila. Así se implementan las coroutines de Lua en C.
Compartir datos entre estados
Los datos no se pueden pasar directamente entre estados de Lua independientes. Serialícelos como strings o use estructuras de memoria compartida del lado de C accesibles mediante userdata.
Llamadas protegidas frente a llamadas sin protección
lua_pcall captura los errores (usa setjmp/longjmp internamente). lua_call propaga los errores y aborta el programa. Use siempre lua_pcall en producción.
// Safe:
if (lua_pcall(L, nargs, nresults, 0) != LUA_OK) {
const char *err = lua_tostring(L, -1);
lua_pop(L, 1);
// handle error
}Objetos de error
Los errores en Lua pueden ser cualquier valor, no solo strings. error({code=404, msg="not found"}) introduce una tabla como error. El código C la lee de la pila cuando falla pcall.
Manejador de panic
Si un error escapa de un pcall (por ejemplo, desde una función de C llamada sin protección), Lua llama al manejador de panic establecido mediante lua_atpanic(L, fn) antes de abortar.
// C code
lua_atpanic(L, function(lua_State *L) {
fprintf(stderr, "PANIC: %s\n", lua_tostring(L, -1));
exit(1);
return 0;
});Restauración de la pila tras un error
Después de un error de lua_pcall, la pila se restaura al estado anterior a la llamada (sin la función ni los argumentos, pero con el objeto de error en la cima).
Limpieza del estado
Cierre siempre el estado con lua_close(L) cuando termine. Esto activa todos los finalizadores __gc y libera toda la memoria asignada.
Seguridad de los hilos
Un estado de Lua no es seguro para subprocesos. No llame nunca de forma simultánea a dos funciones de la API de C sobre el mismo estado. Use un estado por hilo del sistema operativo o un mutex para serializar el acceso.
Asignador de memoria
De forma predeterminada, Lua usa realloc. Proporcione un asignador personalizado mediante lua_newstate(allocFn, ud) para realizar un seguimiento de la memoria, establecer límites o usar pools personalizados.
Aislamiento con múltiples estados
Ejecute el código que no sea de confianza en un estado de Lua nuevo y aislado, sin abrir las bibliotecas estándar. Cualquier error grave o agotamiento de recursos quedará contenido en ese estado.
Pregunta sobre el manejo de errores
¿Cuál es la diferencia entre lua_call y lua_pcall?
Repaso: gestionar estados y errores
Use lua_pcall (nunca lua_call) en producción. Establezca un manejador de panic para la recuperación como último recurso. Mantenga un estado por hilo. Use varios estados aislados para crear sandboxes. Llame siempre a lua_close para realizar la limpieza.
Aprende Lua con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 40
- Lecciones
- 159
Preguntas frecuentes
¿La lección «Gestión del estado y los errores» es gratis?
Sí — el texto completo de «Gestión del estado y los errores» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Lua Academy, actualiza a CoddyKit PRO. El curso de Lua Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Gestión del estado y los errores»?
Utilice lua_pcall para realizar llamadas protegidas y gestione los errores en la capa C. Practicas Lua Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Lua Academy?
No se requiere experiencia previa. Lua Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Gestión del estado y los errores»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Lua Academy?
Sí. Cada lección de Lua Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Modelo de pila de la API C de Lua
- Llamada a funciones de Lua desde C
- Registro de funciones C en Lua
- Gestión del estado y los errores