lua-面向对象(定义与调用)

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)

这里推荐使用:来定义以及调用

上一篇:Redis+Lua解决高并发场景抢购秒杀问题


下一篇:了解下Lua 基本语法