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})
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 0. 问题:C++中是否允许一个类继承自多个父类? C++支持编写多重继承的代码:(1) 一个子类可以拥有多个父类...
    编程半岛阅读 254评论 0 0
  • 多重继承 C++支持编写多重继承的代码一个子类可以拥有多个父类子类拥有所有父类的成员变量子类继承所有父类的成员函数...
    nethanhan阅读 679评论 0 0
  • 每一代人的青春都是差不多的,所以我们这代人谈论起五月天和周杰伦就仿佛谈论今天的天气该不该套上秋裤一样。 不...
    Lime_彭阅读 187评论 0 0
  • 一.实习 大学三年转眼间过去了,对于壮子来说大四即将面临的是实习。而对于本来就是当地比较出名师范学院师范生的壮子找...
    oscar双头木阅读 121评论 2 0
  • 今天听到一个比较有意思的概念,叫做心理账户,大概的意思是,我们会把钱分门别类地放在不同的心理账户里。 因为钱这个东...
    苏家小榭阅读 314评论 2 9