使用LUA CAPI调用LUA匿名闭包

原创 2015年07月11日 10:28:36
    static int Lua_ForEach(lua_State * const L)
    {
        //stack1 = table
        //stack2 = function

        int n1 = lua_gettop(L);

        lua_pushvalue(L, 1);
        lua_pushnil(L);
        while(lua_next(L, -2))
        {
            //压入LUA匿名闭包
            lua_pushvalue(L, 2);
            //压入key
            lua_pushvalue(L, -3);
            //压入value
            lua_pushvalue(L, -3);
            //调用LUA匿名闭包
            lua_pcall(L, 2, 0, 0);

            lua_pop(L, 1);
        }
        lua_pop(L,1);

        int n2 = lua_gettop(L);
        printf("\nn1=%d, n2=%d\n", n1, n2);
        return 0;
    }
local tb =
{
    ["test"] = 1,
    [true] = 2,
    [false] = 3,
    [4] = 4,
    5
};

Lua_ForEach(tb, function(k,v) print(k,v) end);

相关文章推荐

lua闭包和尾调用

虽然工作已经基本上没有什么变动了,但是想起来面试的时候,总是屡试不爽的这么个问题。乘着这会儿空闲还是写下来,留作备用。也希望可以帮助到刚出来找Lua方面的工作的童鞋。 其实都是一些基础的东西,只是自...

lua 函数调用1 -- 闭包详解和C调用

这些东西是平时遇到的, 觉得有一定的价值, 所以记录下来, 以后遇到类似的问题可以查阅, 同时分享出来也能方便需要的人, 转载请注明来自RingOfTheC[ring.of.the.c@gmail.c...

Lua 5.1 CAPI pdf

  • 2014年09月04日 08:07
  • 180KB
  • 下载

lua与CAPI概述

1.  栈 1.1 说明 lua与C语言操作都是通过栈来进行的。这个栈是抽象的栈,栈中每一个元素都能保存任何类型的LUA值。  要获得一个lua中的一个值时(例如一个全局变量),只要调用一个...

lua CAPI

1.  建一个新表 void lua_createtable (lua_State *L, int narr, int nrec) 创建一个新的table, 并把它放在栈顶. narr和nrec分...
  • niitlcj
  • niitlcj
  • 2011年03月15日 21:01
  • 1590

lua闭包,ios block,C++lambda函数

下面是三篇描述这三种机制的文章, lua闭包,ios block,C++lambda函数

Lua 闭包

Lua   闭包         首先看看书中是怎么描述闭包的 Lua 中的函数是带有词法定界(lexical scoping)的第一类值(first-class values)。 第一类值指:...

lua闭包

闭包的概念 在Lua中,闭包(closure)是由一个函数和该函数会访问到的非局部变量(或者是upvalue)组成的,其中非局部变量(non-local variable)是指不是在局部作用范围内定...

关于lua的闭包(Closure)和Upvalue

关于lua的闭包(Closure)和Upvalue upvalue:嵌套函数的外部函数的局部变量 function func(a) return function ()     a = a +...
  • djvc
  • djvc
  • 2017年03月30日 10:14
  • 315

C++导出类到lua中,对metatable和闭包的应用

注意:Lua本身并不支持把C++类导入的,只支持函数,所以需要自己实现。 代码: 需要导出的类 class Enemy { protected: char _name[32]; ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:使用LUA CAPI调用LUA匿名闭包
举报原因:
原因补充:

(最多只允许输入30个字)