c - 从 C 访问 Lua 子表字段

标签 c lua lua-table luac

我想在 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);
}

最佳答案

试试这个:

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

如果使用相对(=负)堆栈位置,跟踪堆栈内容会更容易。

关于c - 从 C 访问 Lua 子表字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25878762/

相关文章:

c++ - 高斯消元的逻辑错误

c - int 指针不会返回,触发 SIGABRT

lua - 在 Lua 表中使用坐标对作为键

lua - 如何在lua中实现只读表?

arrays - 无法使用另一个表中的数字声明表元素

C 未定义对 `some_foo' 的引用

java - 如何解决lua错误: "attempt to index ? (a nil value)"

command-line - 我如何从另一个 Lua 脚本中运行带有用户指定参数的 Lua 脚本?

arrays - 如何检查 lua 表是否只包含顺序数字索引?

c - 我如何修复我的零钱所欠硬币的 'end of non-void function'?