lua_pushvalue(L, 1); /* state, */ if (iszero) lua_pushinteger(L, 0); /* and initial value */ else lua_pushnil(L); // 在堆栈上放入变量var的值,也就是nil。 } else { lua_pushvalue(L, 1); /* argument 'self' to metamethod */ lua_call(L, 1, 3); /* get 3 values from...
luaL_checkinteger(L, 1); lua_pushvalue(L, 1); printf("Func2 stack size:%d,stack value:%d\n",lua_gettop(L),lua_tointeger(L,1) ); lua_setfield(L, LUA_ENVIRONINDEX, "leisure"); printf("Func2 stack size:%d,stack value:%d\n",lua_gettop(L),lua_tointeger(L,1) ); return 0;...
lua_pushnumber 压入的初始值0。 其中压入一个upvalues值,则在pushcclosure第三个参数个数则为1. 在函数中 static int counter (lua_State *L) { double val = lua_tonumber(L, lua_upvalueindex(1)); lua_pushnumber(L, ++val); lua_pushvalue(L, -1); /* duplicate it */ lua_replace(L, lu...
lua_pushvalue(L, 1); /* state, */ if (iszero) lua_pushinteger(L, 0); /* and initial value */ else lua_pushnil(L); // 在堆栈上放入变量var的值,也就是nil。 } else { lua_pushvalue(L, 1); /* argument 'self' to metamethod */ lua_call(L, 1, 3); /* get 3 values from...
int v = luaL_checknumber(L, -1); Foo::setV(v); return 0; } int getV(lua_State* L) { lua_pushnumber(L, Foo::getV()); } }; 这样, FooWrapper就成为lua和c++对象的一个通信界面, 里面本身不实现任何逻辑, 只实现数据通信, 转发调用. 这样就解决了数据流的来源和去向问题. ...
void lua_concat (lua_State *L, int n); 连接栈顶的 n 个值, 然后将这些值出栈,并把结果放在栈顶。 如果 n 为 1 ,结果就是那个值放在栈上(即,函数什么都不做); 如果 n 为 0 ,结果是一个空串。这相当于Lua中的..运算符。 在C函数中设置来自Lua的全局变量: ...
lua_pushvalue(L, -1); // 这里强制增加引用, 如果不手动解引用, UObject不会释放. int32 ObjectRef = luaL_ref(L, LUA_REGISTRYINDEX); // keep a reference for 'INSTANCE' FUnLuaDelegates::OnObjectBinded.Broadcast(Object); // 'INSTANCE' is on the top of stack now ...
lua_pushvalue(L, -1); lua_rawseti(L, 2, ++i); } return 1; } 然后按照惯例在tab_funcs数组里的{NULL, NULL}之前添加: {"keys", keys}, {"values", values}, 然后编译后,lua里便多了两个方法table.keys和table.values。 注意,很多工程里其实已经有了这两个函数,只不过是Lua版本: ...
LuaDLL.lua_pushvalue(L, stackPos); int reference = LuaDLL.toluaL_ref(L); return LuaStatic.GetTable(L, reference); } public LuaTable GetTable(int reference) { LuaTable table = TryGetLuaRef(reference) as LuaTable; if (table == null) ...