请确认我对Lua堆栈的理解是否正确?

我正在学习Lua。

我不明白为什么这是错误的。

这是我的Lua代码:

-- lua
Enemy = {
  HP    = 30,
  SPEED = 8,
  POWER = 10
}

这是我的cpp代码。 它将访问Enemy表中的每个值。

...
lua_getglobal(L, "Enemy");

/*
    当前虚拟堆栈
    -----------------------------
    [1]或[-1]  Enemy表
*/

lua_pushstring(L, "HP");

/*
    当前虚拟堆栈
    -----------------------------
    [2]或[-1]  "HP"
    [1]或[-2] Enemy表
*/

lua_gettable(L, 1); // 弹出键(“HP”)并推入Enemy [“HP”]

/*
    当前虚拟堆栈
    -----------------------------
    [2]或[-1] 30(Enemy[“HP”])
    [1]或[-2]   Enemy表
*/

// 使用30
double dHP = lua_tonumber(L, -1);

// 我认为栈顶的30将被弹出。
lua_pop(L, -1);

/*
    当前虚拟堆栈
    -----------------------------
    [1]或[-1]  Enemy表
*/

lua_pushstring(L, "SPEED");

/*
    当前虚拟堆栈
    -----------------------------
    [2]或[-1]  "SPEED"
    [1]或[-2] Enemy表
*/

lua_gettable(L, -2);

/*
    当前虚拟堆栈
    -----------------------------
    [2]或[-1] 8(Enemy[“SPEED”])
    [1]或[-2]  Enemy表
*/

// 当我使用栈顶时,VS会抛出错误。
// Lua错误说我正在尝试索引空值。
double dSpeed = lua_tonumber(L, -1);

如果lua_tonumber弹出值,那就有意义了。但是没有这样的说明。

我想知道堆栈的哪一部分是错误的.. 谢谢。

点赞
用户1847592
用户1847592

lua_pop(L, n) 弹出堆栈上的 n 个元素。

因此,lua_pop(L, -1); 不是您想要的。

2021-02-16 10:20:32