神奇的Lua:闭包和upvalue
2014-05-26 16:39
351 查看
闭包 = 函数 + upvalue
函数是LuaVM指令、常量等的集合,upvalue是一些变量的集合。
我们平时所使用的函数都是闭包
举个例子:
foo就是一个闭包,由一个函数和一个变量组成的。当然,即使下面的foo也可以被认为是一个闭包,即使它不包含任何upvalue。
善用闭包可以别写出简洁或者更易读的代码。
1、是代码更加易读。例如:
虽然增加了代码的复杂性,但是增加了易读性,而易于理解是写代码应该放在首位的。
2、减少全局变量
闭包还可以实现多个函数共享一个局部变量,从而不依赖于全局变量进行沟通,带来的好处是减少全局变量。
例如:
函数是LuaVM指令、常量等的集合,upvalue是一些变量的集合。
我们平时所使用的函数都是闭包
举个例子:
local var = 0 local foo = function() var = 88 end
foo就是一个闭包,由一个函数和一个变量组成的。当然,即使下面的foo也可以被认为是一个闭包,即使它不包含任何upvalue。
local foo = function() end
善用闭包可以别写出简洁或者更易读的代码。
1、是代码更加易读。例如:
local function point(x, y) return function() return x, y end end local function SetPos(point) local x, y = point() print(x, y) end SetPos(point(2, 3))
虽然增加了代码的复杂性,但是增加了易读性,而易于理解是写代码应该放在首位的。
2、减少全局变量
闭包还可以实现多个函数共享一个局部变量,从而不依赖于全局变量进行沟通,带来的好处是减少全局变量。
例如:
local function Person(age) return {IncAge = function() age = age + 1 end, ShowAge = function() print(age) end} end -- 测试 person = Person(18) person.IncAge() person.ShowAge() person2 = Person(99) person2.ShowAge()person的两个函数共享了age变量,不依赖全局变量就完成了协作。而且person2的创建是不是有些类机制的意味呢?
相关文章推荐
- Lua的upvalue和闭包
- 关于lua的闭包(Closure)和Upvalue
- Lua的upvalue和闭包
- lua的全局变量、局部变量、函数闭包和非局部变量(upvalue)
- lua 闭包及upvalue
- Lua的upvalue和闭包
- lua __index __newindex upvalue 示例
- Lua upvalue
- Lua 学习笔记之 function、closure和upvalue
- Lua的function、closure和upvalue
- Lua的function、closure和upvalue
- Lua的function、closure和upvalue
- Lua的function、closure和upvalue
- lua __index __newindex upvalue 示例
- lua学习笔记之Lua的function、closure和upvalue
- lua upvalue
- Lua语法小贴士(十五)upvalue
- Lua的function、closure和upvalue
- Lua upvalue definition
- Lua的function、closure和upvalue