2014-09-16 13 views
4

루아에 모델 설명을 저장하고 비 순차적으로 읽고 싶습니다. 모든 데이터는 증분 순서로 저장됩니다.C에서 루아 서브 테이블 필드에 액세스하기

device_pins = 
{ 
    {is_digital=true, name = "A", number = 1, on_time=15000000000, off_time=22000000000}, 
    {is_digital=true, name = "B", number = 2, on_time=15000000000, off_time=22000000000}, 
    {is_digital=true, name = "C", number = 3, on_time=15000000000, off_time=22000000000}  
} 

대부분이 데이터를 C 구조체에 저장하는 것과 같습니다. 그래서 device_pins [1..3]과 같은 하위 루틴을 루핑하고 서브 루틴 값처럼 접근하고 싶습니다 : device_pins [1] .name 등등. 지금까지 테이블을 반복 할 수는 있지만 서브 테이블에 접근 할 수는 없습니다. 필드, 나는 lua_getfield을 시도했지만이

lua_getglobal (luactx, "device_pins"); 
if (0 == lua_istable(luactx, 1)) 
{ 
    out_log("No table found"); 
} 
lua_pushnil(luactx); 
while (lua_next(luactx, 1) != 0) 
{  
out_log(lua_typename(luactx, lua_type(luactx, -1))); 
lua_pop(luactx, 1); 
} 

답변

2

대신이 시도 여기에 적합하지 않은 것 같다

lua_getglobal (luactx, "device_pins"); 
if (0 == lua_istable(luactx, -1)) 
{ 
    out_log("No table found"); 
} 
for (i=1; ; i++) 
{  
    lua_rawgeti(luactx,-1,i); 
    if (lua_isnil(luactx,-1)) break; 
    out_log(luaL_typename(luactx, -1)); 
    lua_getfield(luactx,-1,"name"); 
    out_log(lua_tostring(luactx,-1)); 
    lua_pop(luactx, 2); 
} 

당신이 상대 (= 음수) 스택 위치를 사용하는 경우 스택의 내용을 추적하는 것이 더 쉽습니다 .

+0

그건 속임수 였어! 고마워요! 그것은 루아와 함께 더 많은 것들을하는 법을 이해하는 것 같습니다, 그것은 완벽한 도구입니다. – pugnator