美文网首页
lua学习笔记(一)

lua学习笔记(一)

作者: overflow_e4e4 | 来源:发表于2019-12-10 18:23 被阅读0次

    lua面向对象

    Rectangle = { }
    
    function Rectangle:init( width, height)
        o =  {}
        self.__index = self
        setmetatable(o, self)
        o.height = height
        o.width = width
        return o
    end
    
    function Rectangle:calArea()
        return self.width * self.height;
    end
    

    有意思的是在lua中,最基本的结构是table,需要用table来描述对象的属性。所以可以理解java中的classobject都在lua中都是table。可以自定义一个函数来修改原table的各个属性然后返回修改对象来模仿面向对象编程中的new,从而新建一个对象(其实是table)。
    其中关键的三行代码:

        o =  {}
        self.__index = self
        setmetatable(o, self)
    

    首先新建一个table,
    setmetatable函数是将后者设为前者的元表,self.__index = self是将自己设置自己的__index 元方法。原因如下:

    -- 1.t中是否有k,有则直接返回值,否则第2步
    -- 2.t是否有元表, 无则返回nil, 有则第3步
    -- 3.t的元表是否有__index元方法, 无则返回nil, 有则查找__index指向的表或对应的方法

    如果用代码来解释的话:

    metaT = { foo = 3 }
    t = setmetatable({}, metaT)
    print(t.foo)--此时为nil
    
    metaT = { foo = 3 }
    t = setmetatable({}, {__index = metaT})
    print(t.foo)--此时为3
    

    所以,那三行代码是一个组合拳,用来达到继承属性的效果。

    相关文章

      网友评论

          本文标题:lua学习笔记(一)

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