Tengo una función anidada relativamente profundamente en un conjunto de tablas. ¿Hay alguna forma en C/C++ para obtener una "referencia" a esa función y presionar esa (y args) en la pila cuando necesito usarla?Referencia a la función Lua en C/C++
Respuesta
Esto es lo que el reference system es para. La función llamada r = luaL_ref(L, LUA_REGISTRYINDEX)
almacena el valor en la parte superior de la pila en el registro y devuelve un número entero que se puede almacenar en el lado C y se usa para recuperar el valor con la llamada de función lua_rawgeti(L, LUA_REGISTRYINDEX, r)
.
Consulte el PiL chapter, así como la documentación de luaL_ref()
, lua_rawgeti()
y luaL_unref()
para la historia completa.
La API de Lua (http://www.lua.org/manual/5.1/manual.html#3) se puede utilizar para acceder a los miembros de la tabla que desee. Utilice lua_gettable() para extraer un miembro de la tabla y colocarlo en la pila lua, si el miembro también es una tabla simplemente llame a lua_gettable() nuevamente para acceder a esta tabla, y así sucesivamente ...
(Dependiendo de lo que estamos haciendo lua_rawget() podría ser una mejor opción que lua_gettable())
Addtional en respuesta al comentario:
está bien eso es un poco más interesante. Bueno, una tabla es un objeto de referencia (más o menos), por lo que probablemente sea seguro guardar la referencia de tabla más interna en alguna parte.
Dado que la API de lua no parece tener de todos modos manipular directamente las referencias de tabla, probablemente tendrá que insertar la referencia en una tabla global, o si eso no funciona, una nueva tabla con una sola entrada de tabla. Cuando quieras la referencia más tarde, solo obténgala de lo global.
p. Ej.
// Final table reference is now at top of stack, after multiple dereferences
lua_setglobal(L, "mytableref");
- 1. función Lua
- 2. ¿Referencia a la función miembro?
- 3. Pase el objeto C++ a la función Lua
- 4. ¿Cómo creo una tabla Lua en C++ y la paso a una función Lua?
- 5. ¿Cómo se hace referencia a un objeto en Lua?
- 6. C++ llamar a la función lua con parámetros variables
- 7. Llamar a la función Lua sin ejecutar el script
- 8. Lua - averiguar la función de llamada
- 9. "Referencia no definida a la función" error
- 10. C++ referencia indefinida a la función definida
- 11. Hace referencia a la función de constructor
- 12. referencia indefinida a la función de plantilla
- 13. Registrar la función C en la tabla Lua
- 14. ¿Defina una función hacia adelante en Lua?
- 15. C++: ¿Cómo pasar referencia-a-función a otra función?
- 16. Detalles de call/cc
- 17. Función interna de Lua frente a la función de nivel de módulo
- 18. PHP Mail, CC Field
- 19. patrones "call-cc" en Scala?
- 20. ¿Es posible llamar a la cadena de carga en la cadena de códigos de bytes lua que contiene una referencia a una función C?
- 21. iterar a través de la tabla Lua
- 22. Safe Lua invoke C++ función registrada
- 23. ¿Qué es call/cc?
- 24. Scala: referencia de retorno a una función
- 25. cómo devolución de llamada una función lua de función ac
- 26. Referencia no definida a la función no miembro - C++
- 27. C error: referencia indefinida a la función, pero está definido
- 28. php array referencia que pasa a la función
- 29. pasando los punteros a la función que toma una referencia?
- 30. Compilador Lua a JVM?
Ya sé cómo hacerlo :) Quiero obtener una función a la que se hace referencia anidada profundamente en las tablas para que luego pueda llamar a la función sin atravesar todas esas tablas. – jameszhao00
[Agregado a respuesta] –