原型:void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n); 解释:把一个新的 C closure 压入堆栈。 lua_pushcfunction## 原型:void lua_pushcfunction (lua_State *L, lua_CFunction f); 解释:将一个 C 函数压入堆栈。 这个函数接收一个 C 函数指针,并将一个类型为 function 的 Lu...
其中lua_CFunction定义如下: lua_pushcclosure函数会先创建一个CClosure结构,然后把提前push到栈顶的n个元素作为upvalue,将其引用存储在CClosure的upvalue数组中。 可见在堆栈调用这一方面来看,CClosure和LClosure没有什么区别。二者的最大区别,在于LClosure是需要去解析lua文件来得到upvalue以及字节码等信息,在执行时...
如预期的一样,lua_pushcclosure将新的闭包放到栈内,因此闭包作为newCounter的结果被返回。 实际上,我们之前使用的lua_pushcfunction只是lua_pushcclosure的一个特例:没有UpValue的闭包。查看它的声明可 以知道它只是一个宏而已: #definelua_pushcfunction(L,f) lua_pushcclosure(L, (f), 0) 在count函数中,...
lua_pushcclosure(aaa,&counter,1);intfff=lua_gettop(aaa); printf("推入了closure之后,站内的数量=%d\n",fff);return1; } 在这里,我们多推入了几个元素,但是还是返回一个 调用代码如下: lua_pushstring(aaa,"feifei"); lua_pushstring(aaa,"wenqian"); lua_pushcfunction(aaa, newCounter); lua_se...
闭包(closure) 在编写用于Lua的C函数时,我们可能需要一些类似于面向对象的能力,比如我们想在Lua中使用象这样的一个计数器类: struct CCounter{ CCounter() :m_(0){} int count(){ return ++i; } private: int m_; }; 这里如果我们仅仅使用lua_pushcfunction提供一个count函数已经不能满足要求(使用static...
void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n); 1. 2. 3. 6.lua_pushcfunction //将一个 C 函数压入堆栈。 这个函数接收一个 C 函数指针,并将一个类型为 function 的 Lua 值 压入堆栈。当这个栈顶的值被调用时,将触发对应的 C 函数。
lua_pushstring(l,"function_name"); lua_pushcfunction(l,lua_CFunction_define); // 相当于export_table[function_name] = lua_CFunction_define; lua_rawset(l,-3); } lua_pop(l, 1); C调用Lua 通过lua_call和lua_pcall实现,先把函数压栈,这里的函数是在lua中的function,由于上面C函数可以关联到...
lua_pushcclosure void lua_pushcclosure (lua_State *L, lua_CFunction fn, int n); 把一个新的 C closure 压入堆栈。 当创建了一个 C 函数后,你可以给它关联一些值,这样就是在创建一个 C closure ;接下来无论函数何时被调用,这些值都可以被这个函数访问到。为了将一些值关联到一个 C 函数上,首先...
lua_pushstring(L, T::function[i].name); lua_pushnumber(L, i);//upvalue lua_pushcclosure(L,&LuaMgr<T>::thunk,1); lua_rawset(L,-3);//table["T::function[i].name"] = thunk; } } staticintconstructor(lua_State*L)//构造函数返回表,该函数用于脚本调用 ...
void(lua_pushboolean)(lua_State*L,intb); void(lua_pushcclosure)(lua_State*L,lua_CFunctionfn,intn); 数据获取接口: C++ lua_Number(lua_tonumber)(lua_State*L,intidx); lua_Integer(lua_tointeger)(lua_State*L,intidx); int(lua_toboolean)(lua_State*L,intidx); ...