Lua初识之再论函数闭包-十一

来源:互联网 发布:windows repair 3.1 编辑:程序博客网 时间:2024/04/28 17:56
Lua初识之再论函数闭包-----------------------------function newCounter(n)    print("n = " .. n)    return function(b)      -- 匿名函数,newCounter()函数返回时调用了匿名函数 function()        return b       endend  -- newCounter()的返回值,其实是 function()的返回值newCounter(3)  -- 3 --调用newCouter(n)函数newCounter(10) -- 10 --调用newCouter(n)函数c1 = newCounter( 2) -- n = 2  --调用newCouter(n)函数c2 = newCounter( 6) -- n = 6  --调用newCouter(n)函数print( c1(5)) -- 5   --调用的其实是 function(b)print( c2(5)) -- 5   --调用的其实是 function(b)print( c1(5)) -- 5   --调用的其实是 function(b)print( c2(5)) -- 5   --调用的其实是 function(b)print( c1(5)) -- 5   --调用的其实是 function(b)print( c2(5)) -- 5   --调用的其实是 function(b)-------------------------function newCounter()    local i = 0    return function()        i = i + 1        return i    endendc1 = newCounter()print( c1()) -- 1print( c1()) -- 2print( c1()) -- 3--匿名函数使用 upvalue i 保存他的计数,当我们调用匿名函数的时候--i 已经超出了作用范围,因为创建 i的函数 newCounter已经返回了,然而--Lua用壁报的思想正确处理了这种情况,简单的说闭包是一个函数加上它可以正确访问--的upvalues,如果我们再次调用newCounter,将创建一个新的局部变量i,因此我们得到了一个作用在心得变量i上的闭包------------------------function newCounter()    local i = 0    return function()        i = i + 1        return i    endendc1 = newCounter()c2 = newCounter()print( c1()) -- 1print( c2()) -- 1print( c1()) -- 2print( c2()) -- 2print( c1()) -- 3print( c2()) -- 3--匿名函数使用 upvalue i 保存他的计数,当我们调用匿名函数的时候--i 已经超出了作用范围,因为创建 i的函数 newCounter已经返回了,然而--Lua用壁报的思想正确处理了这种情况,简单的说闭包是一个函数加上它可以正确访问--的upvalues,如果我们再次调用newCounter,将创建一个新的局部变量i,因此我们得到了一个作用在心得变量i上的闭包--由上可知 c1() 和 c2 调用的 i是独立的-------------------------------


0 0
原创粉丝点击