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语言中的继承:

posted @ 2015-07-05 16:10  沙中世界  阅读(114)  评论(0)    收藏  举报