为什么在这段代码中Lua返回一个空表?

如我之前所评论的一样,我的问题是我无法在 C 中创建一个使用字符串作为键的表。我制作了一个快速测试程序,演示了我所遇到的问题:

以下是其 C++ 部分:

// 代码省略

以下是其 Lua 部分:

-- 代码省略

目前这段代码可以正常运行——Lua 脚本输出的是你所期望的结果。将将把 lua_pushnumber(L, 3.14); 这一行更改为 lua_pushstring(L, "foo");,结果我在 Lua 端只得到一个空的表。这里我有什么做错的思路吗?

原文链接 https://stackoverflow.com/questions/6400433

点赞
stackoverflow用户596285
stackoverflow用户596285

你在 Lua 中检查表格的方式不正确:

if #table > 0 then

#table 只是告诉你表格中未使用的第一个整数是 0。当你把一个字符串插入表格时,计数器不会增加,因为它不是连续数组的一部分,你也不能使用 ipairs 处理它。只需要切换到使用 pairs,你就会看到 foo

function DumpTable(table)
    print("LuaDumpTable")
    local out = "\t"
    for i, v in pairs(table) do
      out = out .. i .. "=" .. v .. " "
    end
    print(out)
end

老的注释,只是提供信息:

我不认为这会导致问题,但对于从 Lua 调用的 API,通常需要从栈中弹出输入。因此,在 lua_tonumber 调用之后:

int32 value = lua_tonumber(L, 1);

lua_pop(L, 1);

rgb_color c = ui_color((color_which)value);
2011-06-19 11:31:03