2

我对 C++ 中使用的这个简单的 LUA 脚本代码有疑问。

Main.cpp
#include <iostream>
using namespace std;
extern "C"
{
#include "lua.h"
#include "lualib.h"
#include "lauxlib.h"
}
int main()
{
    lua_State *L=luaL_newstate();
    luaL_openlibs(L);
    luaL_loadfile(L,"script.lua");
    lua_call(L,0,1);
    int n;
    n=lua_tonumber(L,-1);  // Can be changed to 0 and i gain the same result as -1
    cout<<n<<endl;
    lua_close(L);
    cout<<"test"<<endl;
    return 0;
}

script.lua
print("Hello world")
return 10

程序正常工作并返回 10 到控制台,但问题是为什么当我将 lua_tonumber(L,-1) -1 更改为 0 时它仍然返回 10?似乎我在堆栈中有两个 10,一个索引为 0,另一个索引为 -1。但为什么?

4

1 回答 1

3

来自 Lua 文档:

正索引表示绝对堆栈位置(从 1 开始);负索引表示相对于堆栈顶部的偏移量。

Lua 中不允许使用 0 索引并且行为未定义(可能只是将 0 更改为 1,但您不应该依赖它)。

于 2012-08-12T18:18:43.547 回答