self:定义方法的时候带上一个额外的参数,来表示方法的作用对象
Account = {balance = 0}
function Account.withdraw(v)
Account.balance = Account.balance - v
end
这个定义创建了一个新的函数,并保存在Account对象的withdraw域内,下面我们可以这样调用:
Account.withdraw(100)
如果我们改变这个对象的名字,函数withdraw将不能工作:
a =Account
Account = nil
a.withdraw(100) --ERROR
这样违背了对象应该有独立的生命周期
一个灵活的方法是:定义方法的时候带上一个额外的参数,来表示方法作用的对象,这个参数可以是self或者this:
function Account.withdraw(self,v)
self.balance = self.balance - v
end
调用:
a1.withdraw(a1,100)
lua可以通过冒号操作符来隐藏这个参数的声明
function Account:withdraw(v)
self.balance = self.balance - v
end
调用:
a:withdraw(100)
代码示例:
local t = {foo=2}
function t.f(self)
return self.foo
end
--此方法可用来创建静态函数
local instance = {foo=3}
function t.instance()
local self = instance
return self.foo
end
print(t:f()) --2
print(t.instance()) --3