Lua多重继承

继承
多重继承

一.

--遍历每一个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多重继承)