您的位置:首页 > 编程语言 > Lua

神奇的Lua:闭包和upvalue

2014-05-26 16:39 351 查看
闭包 = 函数 + upvalue

函数是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 closure 闭包