我创建了一个文件,代码为
Request = {
TimeAdd = true;
DaysAdd = true;
};
源代码是用C 制作的
lua_getglobal(L, "Request")
lua_getfield(L, -1, "TimeAdd");
time_request = lua_toboolean(L, -1);
lua_getfield(L, -1, "DaysAdd");
data_request = lua_toboolean(L, -1);
我通常做程序的编译,它会发生错误lua
LUA PANIC:调用LUA API时出现未受保护的错误(试图索引布尔值)
逐步执行代码,在执行过程中可视化Lua堆栈,错误将变得显而易见。
lua_getglobal(L, "Request"); // Stack: [] -> [(Request table)]
lua_getfield(L, -1, "TimeAdd"); // [>(Request table)<] -> [(Request table), true]
time_request = lua_toboolean(L, -1); // [(Request table), >true<]
lua_getfield(L, -1, "DaysAdd"); // [(Request table), >true<] ERROR: Cannot index `true`
当您调用lua_getfield(L, -1, "DaysAdd")
时,堆栈的顶部是值true
,它是不可索引的。
在获得DaysAdd(lua_pop(L, 1)
)之前从堆栈中弹出true
值,或者将堆栈索引调整为lua_getfield
以指向请求表(lua_getfield(L, -2, "DaysAdd")
)