Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function class(const,baseClass)
- local newClass={}
- local newClass_mt={__index=newClass}
- function newClass:include(interface)
- newClass.Imethods={}
- if type(interface)~="table" then
- error("Interface must be an object(table)",2)
- end
- for k,v in pairs(interface) do
- newClass[k]=v
- table.insert(newClass.Imethods,v)
- end
- end
- function newClass:superClass()
- return baseClass
- end
- function newClass:isSubClassOf(theClass)
- local b_isa = false
- local cur_class = newClass
- while ( nil ~= cur_class ) and ( false == b_isa ) do
- if cur_class == theClass then
- b_isa = true
- else
- cur_class = cur_class:superClass()
- end
- end
- return b_isa
- end
- if baseClass then
- setmetatable(newClass,{ __index = baseClass, __call=function(...) tArgs={...} table.remove(tArgs,1) newClass.constructor=const
- local newinst = {}
- setmetatable( newinst, newClass_mt )
- newClass.constructor(unpack(tArgs))
- return newinst
- end})
- if type(baseClass.Imethods)=="table" then
- newClass.Imethods={}
- for k,v in pairs(baseClass.Imethods) do
- newClass[k]=v
- table.insert(newClass.Imethods,v)
- end
- end
- end
- setmetatable(newClass,{ __call=function(...) tArgs={...} table.remove(tArgs,1) newClass.constructor=const
- local newinst = {}
- setmetatable( newinst, newClass_mt )
- newClass.constructor(unpack(tArgs))
- return newinst
- end})
- return newClass
- end
Advertisement
Add Comment
Please, Sign In to add comment