美文网首页
Lua多重继承

Lua多重继承

作者: 86a262e62b0b | 来源:发表于2020-03-10 11:27 被阅读0次

    继承
    多重继承

    一.

    --遍历每一个table,查找有没有key
    local function search (key, tables)
    
        for i=1, table.getn(tables)  do
            local v = tables[i][key]
    
            if v then return v end
         end
    end
    
    --创建一个继承了多个类的类
    function createClass (...)
        local c = {}        --新类
    
        setmetatable(c, {__index = function (t, key)
            return search(key, arg)  --遍历每一个table,查找有没有key
        end})
    
        c.__index = c
    
        --给新类添加构造函数
        function c:new (o)
            o = o or {}
            setmetatable(o, c)
            return o
        end
    
        --返回新类
        return c
    end
    
    --Account 类
    Account = {balance = 0}
    
    --Named类
    Named = {a = '123'}
    function Named:getname ()
        return self.name
    end
    
    function Named:setname (n)
        self.name = n
    end
    
    --继承Account和Named的类
    NamedAccount = createClass(Account, Named)
    
    --实例化对象
    account = NamedAccount:new{name = "Paul"}
    
    print(account:getname())     --> Paul
    
    • 一种提高性能的方法:
    setmetatable(c, {__index = function (t, k)
        local v = search(k, arg)
        t[k] = v       -- save for next access
        return v
    end})
    

    相关文章

      网友评论

          本文标题:Lua多重继承

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