Lua初识之再论函数闭包-十一
2014-12-27 17:46
323 查看
Lua初识之再论函数闭包 ----------------------------- function newCounter(n) print("n = " .. n) return function(b) -- 匿名函数,newCounter()函数返回时调用了匿名函数 function() return b end end -- 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 end end c1 = newCounter() print( c1()) -- 1 print( c1()) -- 2 print( c1()) -- 3 --匿名函数使用 upvalue i 保存他的计数,当我们调用匿名函数的时候 --i 已经超出了作用范围,因为创建 i的函数 newCounter已经返回了,然而 --Lua用壁报的思想正确处理了这种情况,简单的说闭包是一个函数加上它可以 正确访问 --的upvalues,如果我们再次调用newCounter,将创建一个新的局部变量i, 因此我们得到了一个作用在心得变量i上的闭包 ------------------------ function newCounter() local i = 0 return function() i = i + 1 return i end end c1 = newCounter() c2 = newCounter() print( c1()) -- 1 print( c2()) -- 1 print( c1()) -- 2 print( c2()) -- 2 print( c1()) -- 3 print( c2()) -- 3 --匿名函数使用 upvalue i 保存他的计数,当我们调用匿名函数的时候 --i 已经超出了作用范围,因为创建 i的函数 newCounter已经返回了,然而 --Lua用壁报的思想正确处理了这种情况,简单的说闭包是一个函数加上它可以 正确访问 --的upvalues,如果我们再次调用newCounter,将创建一个新的局部变量i, 因此我们得到了一个作用在心得变量i上的闭包 --由上可知 c1() 和 c2 调用的 i是独立的 -------------------------------
相关文章推荐
- Lua 5.0实现 4 函数和闭包
- Lua笔记5 函数和闭包
- Lua初识之迭代器与闭包
- 【COCOS2DX-LUA 脚本开发之十一】C/C++与Lua之间进行数据函数交互以及解决“PANIC: unprotected error in call to Lua API (转)
- lua闭包的理解以及表与函数的几种表达方法
- lua 函数调用1 -- 闭包详解和C调用
- Lua编程笔录--Lua初识及语法二(循环,流程控制,函数)
- Lua初识之函数-十
- 【COCOS2DX-LUA 脚本开发之十一】C/C++与Lua之间进行数据函数交互以及解决“PANIC: unprotected error in call to Lua API (attempt t
- lua 函数调用1 -- 闭包详解和C调用
- Lua学习之--函数,变长参数,closure(闭包)及select的一些特性
- 函数闭包的方式实现lua面向对象
- 《Lua 5.0的实现》第五章 - 函数和闭包
- Lua初识之表和函数-十三
- Lua 函数、闭包、尾调用总结
- lua 函数的闭包
- 原来 JS 也支持跟 Lua 语意一样的内嵌函数的闭包概念
- Lua学习之--函数,变长参数,closure(闭包)及select的一些特性
- lua 函数调用 -- 闭包详解和C调用
- Lua初识(7)_函数库