美文网首页
Lua面向对象

Lua面向对象

作者: _凉笙 | 来源:发表于2022-04-24 15:54 被阅读0次

    面向对象特征
    1) 封装:指能够把一个实体的信息、功能、响应都装入一个单独的对象中的特性。
    2) 继承:继承的方法允许在不改动原程序的基础上对其进行扩充,这样使得原功能得以保存,而新功能也得以扩展。这有利于减少重复编码,提高软件的开发效率。
    3) 多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。
    4)抽象:抽象(Abstraction)是简化复杂的现实问题的途径,它可以为具体问题找到最恰当的类定义,并且可以在最恰当的继承级别解释问题。
    Lua 中面向对象
    我们知道,对象由属性和方法组成。LUA中最基本的结构是table,所以需要用table来描述对象的属性。
    lua中的function可以用来表示方法。那么LUA中的类可以通过table + function模拟出来。
    至于继承,可以通过metetable模拟出来(不推荐用,只模拟最基本的对象大部分时间够用了)。
    Lua中的表不仅在某种意义上是一种对象。像对象一样,表也有状态(成员变量);也有与对象的值独立的本性,特别是拥有两个不同值的对象(table)代表两个不同的对象;一个对象在不同的时候也可以有不同的值,但他始终是一个对象;与对象类似,表的生命周期与其由什么创建、在哪创建没有关系。
    简单的实例

    person={name="lian",age=22}
    
    -- function person.eat(self)
    --   print(self.name.."正在吃饭")
    -- end
    
    function person:eat()
        print(self.name.."正在吃饭")
      end
      
    
    --[[
    function person:eat()
      print(self.name.."正在吃饭")
    end
    ]]--
    
    -- a=person
    -- person=nil
    
    --当通过:调用的时候,系统会自动传递当前table给self
    --当通过.来调用方法的时候,self不会自动赋值,
    --我们必须通过第一个参数来传递当前的table
    -- a.eat(a)
    -- a:eat()
    
    
    function person:new(o)
    --如果o is nuil 也就是false就会返回{}
    local t=o or{}
    --调用一个属性的时候,如果t中不存在,那么会在--index所指定的table中查找
    --setmetatable(t,{__index=self})
    setmetatable(t,self)
    self.__index=self
    
    return t
    end
    person1=person:new({weight=100})
    person1.name="persion1"
    print(person1.name)
    print(person1.weight)
    
    person2=person:new()
    person2.name="persion2"
    print(person2.name)
    print(person.name)
    

    输出结果

    persion1
    100
    persion2
    lian
    

    面向对象继承

    Student=person:new()
    Student.grad=1
    stu1=Student:new()
    stu1:eat()
    print(stu1.grad)
    

    输出

    lian正在吃饭
    1
    

    相关文章

      网友评论

          本文标题:Lua面向对象

          本文链接:https://www.haomeiwen.com/subject/syjaqftx.html