神奇的Lua:闭包和upvalue

闭包 = 函数 + 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的创建是不是有些类机制的意味呢?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值