lua学习笔记2

来源:互联网 发布:java string转map 编辑:程序博客网 时间:2024/06/04 19:15

一开始,我以为在类里面添加一个类为元表就可以实现继承,但是总是报错,所以很烦恼,今天刚好有空,就来研究了一下,终于知道了原由

废话不说了,上代码:

--lua中的类的使用方法
--@people类
 people = {name }
 function people:new(p)
    p = p or {}
    setmetatable(p, self)
    self.__index = self
    return p
 end

function people:getname()
    
    print(self.name)
end


这是一个基础类,我是作为父类来对待的。

-@学生类   继承people类
 student  = {age}


 function student:new(s)
     s = s or {}
    setmetatable(s, self)
    self.__index = self

   setmetatable(s , {__index = student})

     return s
 end


function student:setAge()
        print(self.age)
 end

这是另外一个类,我想把他作为子类,但是现在还不是子类,还是一个简单的类:

加上一句话,让people成为student的父类:

setmetatable(student,{__index = people});

这样就算完成了,对父类的继承了,下面我们来看一看效果:

local pppp = student:new{}
 pppp.sex = 'man'
 pppp.name = "李小龙"
 print(pppp.sex..pppp.name)
 pppp:getname()

由此可以看得出来,类的元素可以随意在任何地方添加,这也是lua中表的特性。


看到没有,子类的student的对象可以调用父类的方法了,getname(),输出结果如上。

下面再看一看子类自己的方法:

pppp:setAge()

pppp.age = 24
 pppp:setAge()

再看看结果:


是不是一目了染,很清晰。

千万不要把setmetatable(student,{__index = people});这句话写到student的new中,因为这样你会发现会出现一些莫名的问题。

原创粉丝点击