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)
答案 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