在C中从args读取Lua表格 - 堆栈级别不正确?

简单来说,我期望我在 C 中构建的 __tostring 方法在我在 Lua 中打印对象时输出“glxy_object(100)”。如果我注释掉“问题代码”注释之间的代码(从 new()方法中读取表格数据的片段),它可以完美地执行此操作。显然,我没有将堆栈返回到需要返回的位置,但是我已经盯着这个代码看太久了,无法看到错误在哪里。

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

点赞
stackoverflow用户169828
stackoverflow用户169828

问题出在“故障代码”第一行之后的注释中:“lua_pop(L,1);”。这将弹出新创建的用户数据,因此“glxy_object_new”返回其第二个参数而不是创建的“glxy_object”。

有两种快速修复方法。第一种方法是删除lua_pop(L,1);行,并将故障代码中两行中的“lua_gettable(L,-2);”都更改为“lua_gettable(L,-3)”。第二种方法是在故障代码之后添加另一个“lua_pushuserdata(L,o)”。

2011-09-04 15:26:31