2009-09-13 20 views
13

Ho una funzione nidificata relativamente in profondità in una serie di tabelle. C'è un modo in C/C++ per ottenere un "riferimento" a quella funzione e spingere quel (e args) nello stack quando ho bisogno di usarlo?Riferimento alla funzione Lua in C/C++

risposta

20

Questo è ciò che è lo reference system. La funzione chiama r = luaL_ref(L, LUA_REGISTRYINDEX) memorizza il valore nella parte superiore della pila nel registro e restituisce un numero intero che può essere memorizzato sul lato C e utilizzato per recuperare il valore con la chiamata di funzione lua_rawgeti(L, LUA_REGISTRYINDEX, r).

Vedere il PiL chapter, così come la documentazione di luaL_ref(), lua_rawgeti(), e luaL_unref() per la storia completa.

2

L'API Lua (http://www.lua.org/manual/5.1/manual.html#3) può essere utilizzata per accedere a qualsiasi membro di tabella desiderato. Usa lua_gettable() per estrarre un membro della tabella e posizionarlo sullo stack lua, se il membro è anche una tabella chiama nuovamente lua_gettable() per accedere a questa tabella, e così via ...

(A seconda di cosa 're facendo lua_rawget() potrebbe essere una scelta migliore di lua_gettable())

Addtional in risposta a commentare:

Va bene che è un po' più interessante. Bene, una tabella è un oggetto di riferimento (più o meno), quindi potresti essere sicuro di salvare la tabella più interna di riferimento da qualche parte.

Dato che l'API lua non sembra avere comunque la possibilità di manipolare direttamente i valori di riferimento della tabella, è probabile che si debba spingere il riferimento in un globale oppure, se non funziona, una nuova tabella con una singola voce di tabella. Quando vuoi l'arbitro più tardi, prendilo dal globale.

ad es.

+0

So già come farlo :) Voglio ottenere una funzione referenziata nidificata in profondità nelle tabelle in modo che possa in seguito chiamare la funzione senza attraversare tutte quelle tabelle. – jameszhao00

+0

[Aggiunto alla risposta] –

Problemi correlati