Lua在c ++奇怪的行为,我无法理解?

时间:2012-08-12 16:57:52

标签: c++ lua

我对这个在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。但为什么?

1 个答案:

答案 0 :(得分:3)

来自Lua文档:

  

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

在Lua中不允许使用

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