lua中构造类的时候,有些函数是提供给类中的方法使用的,并不想对外提供。这个时候就需要通过一定的方式,让外部无法访问这个类这些私有方法。
在之前的继承和多继承中,是通过__index的方法达到继承的目的,但是这样的方式会继承类内部所有的内容。为了保护私有部分,需要换一种继承方式。
代码如下:
function NewAccount(initialBalance)
local self = {
balance = initialBalance,
LIM = 10000.00
}
local withdraw = function(v)
self.balance = self.balance - v
end
local deposit = function (v)
self.balance = self.balance + v
end
local extra = function ()
if self.balance > LIM then
return self.balance * 0.1
else
return 0
end
end
local function getBalance()
return self.balance + extra()
end
return {
withdraw = withdraw,
deposit = deposit,
getBalance = getBalance
}
end
上述代码,将局部变量和局部函数都放在了类的内部。
extra函数只会被用于函数内部的调用,没有必要也不允许被外部访问。
为了满足这样的需求,把extra函数用局部的方式声明。然后将可以向外提供的函数,通过一个table返回。
上述代码用同样的方法将数据进行了私有化,只能通过向外提供的函数来操作数据。