lua中的面向对象由table + function组成,分别表示属性,与方法
最简单的例子:
person = {name = 'SiNan' , age = '23'} --属性 person.walk = function () print(person.name..'在走路') end
这种情况的缺陷在于,方法里的person是写死的,以下例子可说明:
a = person --将person的引用赋值给a person = nil --将person置空 a.walk() --此处无法调用直接报错 原因在于print方法中,person写死 改用a.name才可正常运行
对以上缺陷进行改进,可以给方法传递一个参数,而这个参数代表自己本身
person.walk = function(self) print(self.name..'在走路') end a = person person = nil a.walk(a) --调用时传入自身即可
但是通过以上方式的话,调用也是比较麻烦,每次调用都需要传递自身的参数
lua里提供了:的方式对函数进行定义
function person:walk() print(self.name..'在走路') end a= person person:walk() --调用时直接用:调用则无需传参数,因为:的已经自动传递了 a:walk() --若还想通过.的方式访问,则需要传递参数(第一个参数) a.walk(a)
这里推荐使用:来定义以及调用