Advertisement
ktdm

class.lua -- Lua class implementation

Jun 22nd, 2017
463
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 0.86 KB | None | 0 0
  1. local prepareObj
  2. prepareObj = function(root, obj, proto, mt)
  3.     for k, v in pairs(proto) do
  4.         local t = type(v)
  5.         if t == "table" and k ~= "__proto__" and k ~= "__root__" then
  6.             obj[k] = prepareObj(root, { __proto__ = v, __root__ = root }, v, mt)
  7.         end
  8.     end
  9.     setmetatable(obj, mt)
  10.     return obj
  11. end
  12. local classMt = {
  13.     __index = function(self, key)
  14.         local v = self.__proto__[key]
  15.         if type(v) == "function"
  16.         then return function(...) return v(self.__root__, ...) end
  17.         else return v end
  18.     end
  19. }
  20. return function(proto)
  21.     proto.__new__ = function(...)
  22.         local obj = { __proto__ = proto }
  23.         obj.__root__ = prepareObj(obj, obj, proto, classMt)
  24.         if proto.__init__ ~= nil then proto.__init__(obj.__root__, ...) end
  25.         return obj
  26.     end
  27.     return proto.__new__, proto
  28. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement