Lua inheritance

半城伤御伤魂 提交于 2019-12-06 23:12:28
sylvanaar

You return an empty table in test2:create_inst(), at no point does anything reference test2, so the function test2:bye() is not in the table returned by test2:create_inst()

In your code, test2 actually has nothing to do with the table you are instancing, this new_class table you return from test2:create_inst is the new instance. So naturally it has no field named bye. Simple modification:

function test2:create_inst( baseClass )
    ...
    if baseClass then
        setmetatable( new_class, { __index = baseClass } )
    end
    ...

    function new_class:bye()
        print("bye!")
    end
    return new_class
end

I think the answer want to implement Multi-Inheritance that new_class inherit "test2" and "baseClass".

local function search(k, objlist)
    local i = 0
    local v
    while objlist[i] then
        v = objlist[i][k] 
        if v then return v end
    end
end

function class(...)
    local parents = (...)
    local object = {}
    function object:new(o)
        o = o or {}
        setmetatable(o, object)
        return o
    end
    object.__index = object
    setmetatable(object, 
        {__index=function(t, k)
        search(k, parents)    
    end})
    return object
end

c = class(a, test2)
print(c.test1Data, c.passData,c:hello(), c:bye())
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!