lua-users home
lua-l archive

Re: Accessing subtables

[Date Prev][Date Next][Thread Prev][Thread Next] [Date Index] [Thread Index]


ice wrote:
How can I access tables within tables? My data is structured as so:
entity =
{
 s =
 {
 pos =
 {
 trType = 0,
 trTime = 0,
 trDuration = 0,
 trBase = {128, 128, 128}
 trDelta = {0, 0, 0}
 }
 },
 r =
 {
 currentOrigin = {256, 256, 256}
 }
}
I need to be able to access all of that data. Would I just repeatedly
call lua_pushstring with the new key and then call lua_gettable? What
about accessing the array data? Any help would be appreciated.
Here are a couple of examples complete with stack comments. I assume that 'entity' is an index in the LUA_GLOBALINDEX of the function which contains this code.
/* access (entity.s.pos.trDuration) */
lua_getglobal(L, "entity"); /* entity */
lua_getfield(L, -1, "s"); /* entity s */
lua_getfield(L, -1, "pos"); /* entity s pos */
lua_getfield(L, -1, "trDuration"); /* entity s pos trDuration */
int n = lua_tonumber(L, -1);
/* access (entity.r.currentOrigin[1]) */
lua_getglobal(L, "entity"); /* entity */
lua_getfield(L, -1, "r"); /* entity r */
lua_getfield(L, -1, "currentOrigin"); /* entity r currentOrigin */
lua_rawgeti(L, -1, 1); /* entity r currentOrigin [1] */
int n = lua_tonumber(L, -1);
Note that lua_getfield(), lua_getglobal(), and lua_gettable() may trigger a metamethod, but that lua_rawgeti() will not.
					-Mark

AltStyle によって変換されたページ (->オリジナル) /