Kouksi44

Lua- OOP Class API

Jan 2nd, 2015
182
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.60 KB | None | 0 0
  1. function class(const,baseClass)
  2.  
  3.   local newClass={}
  4.   local newClass_mt={__index=newClass}
  5.  
  6.  
  7.  
  8.  
  9.   function newClass:include(interface)
  10.     newClass.Imethods={}
  11.       if type(interface)~="table" then
  12.         error("Interface must be an object(table)",2)
  13.       end
  14.       for k,v in pairs(interface) do
  15.         newClass[k]=v
  16.         table.insert(newClass.Imethods,v)
  17.         end
  18.      
  19.   end
  20.  
  21.  
  22.   function newClass:superClass()
  23.     return baseClass
  24.   end
  25.  
  26.   function newClass:isSubClassOf(theClass)
  27.     local b_isa = false
  28.    
  29.     local cur_class = newClass
  30.    
  31.     while ( nil ~= cur_class ) and ( false == b_isa ) do
  32.       if cur_class == theClass then
  33.         b_isa = true
  34.       else
  35.         cur_class = cur_class:superClass()
  36.       end
  37.     end
  38.    
  39.     return b_isa
  40.   end
  41.  
  42.   if baseClass then
  43.     setmetatable(newClass,{ __index = baseClass, __call=function(...) tArgs={...} table.remove(tArgs,1)  newClass.constructor=const
  44.       local newinst = {}
  45.       setmetatable( newinst, newClass_mt )
  46.       newClass.constructor(unpack(tArgs))
  47.       return newinst
  48.       end})
  49.      
  50.     if type(baseClass.Imethods)=="table" then
  51.       newClass.Imethods={}
  52.       for k,v in pairs(baseClass.Imethods) do
  53.         newClass[k]=v
  54.         table.insert(newClass.Imethods,v)
  55.       end
  56.     end
  57.   end
  58.  
  59.   setmetatable(newClass,{ __call=function(...) tArgs={...} table.remove(tArgs,1)  newClass.constructor=const
  60.     local newinst = {}
  61.     setmetatable( newinst, newClass_mt )
  62.     newClass.constructor(unpack(tArgs))
  63.     return newinst
  64.     end})
  65.   return newClass
  66. end
Advertisement
Add Comment
Please, Sign In to add comment