什么是类和实例之间的区别?

时间:2018-04-30 19:39:41

标签: class lua instance

lua中的类和实例之间的区别是什么?

我知道类就像模板一样,实例是从模板创建的对象,但我想知道代码的区别是什么。

我的目标是建立一个像这样工作的系统..

--class.widget.lua----------------------------------------------------------

local class  = require "class"
local widget = class("class.widget")

function widget:create()
    --create variables here
end

function widget:update() 
    --update variables here
end

function widget:render()
    --widget render
end

return widget

--class.widget.button.lua---------------------------------------------------

local class  = require "class"
local widget = require "class.widget"
local button = class("button", widget)

function button:create(x, y)
    base:create()
    --create variables here
end

function button:update() 
    base:update()
    --update variables here
end

function button:render()
    base:render()
    --widget render
end

return button

--main.lua------------------------------------------------------------------

local button = require "class.widget.button.lua"
button1      = button(0, 0)
button2      = button(0, 16)

1 个答案:

答案 0 :(得分:1)

虽然这还没有得到解答,但这里的工作正是我想要的方式

如果有人想使用它,我会在这里张贴

编辑:对于我和任何一个寻找优秀lua类的人来说,这是一个更好的版本

return function(name, base)
    local class = {}

    --private vars
    class.__name        = name 
    class.__base        = base
    class.__index       = class
    class.__event       = "create"

    --events
    class.onCreate      = function(inst) end
    class.onUpdate      = function(inst) end
    class.onRender      = function(inst) end
    class.onDelete      = function(inst) end

    --functions
    class.create        = function(inst) inst.__event = "create" inst:onCreate() end
    class.update        = function(inst) inst.__event = "update" inst:onUpdate() end
    class.render        = function(inst) inst.__event = "render" inst:onRender() end
    class.delete        = function(inst) inst.__event = "delete" inst:onDelete() end
    class.getBase       = function(inst) return inst.__base end
    class.getName       = function(inst) return inst.__name end
    class.inheritEvent  = function(inst)
        if inst.__event == "create" then inst.__base:create() end
        if inst.__event == "update" then inst.__base:update() end
        if inst.__event == "render" then inst.__base:render() end
        if inst.__event == "delete" then inst.__base:delete() end
      end

    --constructor
    local    MT  = {}
             MT.__index = base
    function MT:__call(_, ...)
        local    inst = setmetatable({}, class)
        inst:create(inst, ...)
        return inst
    end

    return setmetatable(class, MT)
 end