lua面向对象编程
表是一个对象,并且可以具有变量,变量可以记录表示属性或字段,再加上在lua中函数也可以表示为变量。这样就可以基于table实现面向对象的编程
但也有一些值得注意的地方,下面举例说明:
stu={name="",num=2015001} --定义stu的属性
function stu.add(a,b) --定义stu的方法
return a+b
end
这时候,如果是这样调用:
stu.add(2,3) --返回值是5 没有问题
但是如果这样调用:
a=stu
a.add(2,3) --没有问题
但是如果是在add 里面对num进行更改就有问题了,看下面的例子:
stu={name="",num = 1} --定义stu的属性
function stu.setNum(a)
num=a
end
print(stu.num) --1
stu.setNum(2011)
print(stu.num) --1 有问题了
但是下面这种方式是绝对没有问题的,就是在定义函数的时候加一个变量 self 或者是 this 相当于C中的this
stu={name="",num=2015001} --定义stu的属性
function stu.setNum(self,a) --定义stu的方法
self.num=a
end
a=stu
a.setNum(a,2011)
print(a.num)
值得注意的是 如果self 前面加空格 就不好使了,搞不懂为什么??? 不过用tab键代替就没有任何问题了
这样就没有任何问题了
很多语言的self 或者this这种参数是可以省略的,lua也提供了这种机制,采用如下定义方式:
stu={name="",num=2015001} --定义stu的属性 function stu:setNum(a) self.num=a end a=stu a:setNum(20111907) --注意调用方式 print(a.num)
上面讲述了lua语言实现封装,下面介绍lua语言中的继承: