Lua “attempt to index a nil value”
我正在尝试向Lua注册向量类型,但是当我从Lua调用附加元函数时,出现了一个奇怪的"试图为新值建立索引"错误。
这是涉及的代码部分。 我没有包含任何其他元函数(它们有相同的问题,唯一的不同是最后一行中的数学运算符)。 该错误似乎来自
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 | static void LuaVector_pushVector(lua_State *L, double x, double y) { lua_newtable(L); lua_pushstring(L,"x"); lua_pushnumber(L, x); lua_settable(L, -3); lua_pushstring(L,"y"); lua_pushnumber(L, y); lua_settable(L, -3); lua_newtable(L); lua_pushstring(L,"__add"); lua_pushcfunction(L, LuaVector_lua___add); lua_settable(L, -3); lua_setmetatable(L, -2); } static int LuaVector_lua___add(lua_State *L) { if (!lua_istable(L, 1)) luaL_error(L,"Table excepted for argument #1 LuaVector_lua___add"); if (!lua_istable(L, 2)) luaL_error(L,"Table excepted for argument #2 LuaVector_lua___add"); double x1=0, y1=0, x2=0, y2=0; /* The error occurs somewhere between here */ lua_pushstring(L,"x"); lua_gettable(L, 1); x1 = lua_tonumber(L, -1); lua_pop(L, -1); lua_pushstring(L,"y"); lua_gettable(L, 1); y1 = lua_tonumber(L, -1); lua_pop(L, -1); lua_pushstring(L,"x"); lua_gettable(L, 2); x2 = lua_tonumber(L, -1); lua_pop(L, -1); lua_pushstring(L,"y"); lua_gettable(L, 2); y2 = lua_tonumber(L, -1); lua_pop(L, -1); /* And here */ LuaVector_pushVector(L, x1 + x2, y1 + y2); return 1; } int LuaVector_lua_new(lua_State *L) { double x = 0; if (!lua_isnil(L, 1)) x = lua_tonumber(L, 1); double y = 0; if (!lua_isnil(L, 2)) y = lua_tonumber(L, 2); LuaVector_pushVector(L, x, y); return 1; } void LuaVector_luaregister(lua_State *L) { lua_newtable(L); lua_pushstring(L,"new"); lua_pushcfunction(L, LuaVector_lua_new); lua_settable(L, -3); lua_setglobal(L,"Vector"); } |
它崩溃与代码:
1 2 3 | local vec1 = Vector.new(2, 2) local vec2 = Vector.new(4, 4) local vec3 = vec1 + vec2 |
我试图找出导致问题的原因,但我无法确定实际的错误行(尽管,我相信是
但是您已经编写了