读取lua文件时出现了紧急错误。

我创建了一个包含以下代码的文件

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: unprotected error in call to Lua API (attempt to index boolean value)

点赞
用户646619
用户646619

逐行阅读代码时,随着进展可视化 Lua 栈,这样错误就会显而易见。

lua_getglobal(L, "Request"); // 栈: [] -> [(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<] 错误: 无法对 `true` 进行索引

当你调用 lua_getfield(L, -1, "DaysAdd") 时,栈顶的值为 true,它是不能被索引的。

你可以在获取 DaysAdd 前将 true 值从栈中弹出 (lua_pop(L, 1)),或者调整栈索引让 lua_getfield 指向 Request 表 (lua_getfield(L, -2, "DaysAdd"))。

2015-11-04 23:00:45