我对这个在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。但为什么?
答案 0 :(得分:3)
来自Lua文档:
在Lua中不允许使用正索引表示绝对堆栈位置(从1开始);负指数 表示相对于堆栈顶部的偏移量。
0索引并且行为未定义(可能只是将0更改为1,但您不应该依赖它)。