Доступ к полям подтаблиц Lua из C

Я хочу сохранить описание модели в Lua и прочитать его непоследовательно. Все данные хранятся в возрастающем порядке

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, например device_pins[1..3], и получить доступ к значениям подтаблиц, как я делаю это в Lua: 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);
}

person pugnator    schedule 16.09.2014    source источник


Ответы (1)


Попробуйте это вместо этого:

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);
}

Легче отслеживать содержимое стека, если вы используете относительные (= отрицательные) позиции стека.

person lhf    schedule 16.09.2014
comment
Это сделало трюк! Большое спасибо! Кажется, я понимаю, как сделать еще кое-что с Lua, это идеальный инструмент. - person pugnator; 17.09.2014