Anuncios

Bienvenidos sean a este post, hoy continuaremos con la segunda tecnica de la API de C, en este caso veremos un tema que comenzo a partir de la version 5.1 de Lua donde cada funcion de C que registramos en Lua tiene su propia tabla de entorno.

Anuncios

Una funcion puede acceder a su entorno de la misma forma que accede al registro con un pseudo-indice, para el entorno el pseudo-indice es LUA_ENVIRONINDEX.

Anuncios

Usualmente usamos estos entornos de la misma manera que usamos entornos para los modulos de Lua, creamos una nueva tabla para el modulo y hace que todas las funciones compartan esta tabla, la manera para configurar tales entornos compartidos en C es tambien similar a la manera que configuramos estos entornos en Lua; simplemente cambiamos el entorno del chunk principal asi que todas las funciones crean automaticamente por herencia el nuevo entorno, en C el codigo para setear tal entorno se ve algo asi:

int luaopen_foo(lua_State *L)
{
	lua_newtable(L);
	lua_replace(L, LUA_ENVIRONINDEX);
	luaL_register(L, <nombreLib>, <listafunc>);
	...
}
Anuncios

La funcion abierta luaopen_foo crea una nueva tabla para ser el entorno compartido y usa lua_replace para setear esta tabla como su propio entorno, luego cuando llama a luaL_register todas las nuevas funciones creadas ahi heredaran este entorno actual.

Anuncios

Se deberia favorecer siempre el entorno sobre el registro, al menos que necesites compartir informacion con otros modulos, en particular puedes usar el sistema de referencias usando la tabla de entorno para crear referencias visibles solo para el modulo.

Anuncios

En resumen, hoy hemos visto que es el entorno en funciones, como son, como se configuran, como trabajan, para que se usan y cual es el beneficio con respecto a registro, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00