Guest User

Lua Meta API

a guest
Mar 10th, 2016
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.00 KB | None | 0 0
  1. function get(self)
  2.     self = self or {};
  3.     meta = getmetatable(self) or {};
  4.     return meta;
  5. end
  6.  
  7. function set(self, meta)
  8.     self = self or {};
  9.     meta = meta or {};
  10.     self = setmetatable(self, meta);
  11.     return self;
  12. end
  13.  
  14. function mod(self, meta, override)
  15.     self = self or {};
  16.     meta = meta or {};
  17.     smt = get(self);
  18.    
  19.     for mk, mv in pairs(meta) do
  20.         if override then
  21.             smt[mk] = mv; else
  22.             smt[mk] = smt[mk] or mv; end
  23.     end; return set(self, smt);
  24. end
  25.  
  26. function clear(self)
  27.     self = self or {};
  28.     return set(self);
  29. end
  30.  
  31. function setIndex(self, ...)
  32.     newindex = get(self).index or {};
  33.     for ik, iv in pairs({...}) do
  34.         newindex[ik] = iv;
  35.     end
  36.    
  37.     return mod(self, {
  38.         index = newindex;
  39.         __index = function(object, key)
  40.             local omt = getmetatable(object) or {};
  41.             for _, s in pairs(omt.index or {}) do
  42.                 if s[key] then return s[key] end
  43.             end
  44.         end
  45.     });
  46. end
  47.  
  48. function setCall(self, call)
  49.     return mod(self, {
  50.         __call = function(self, ...)
  51.             return call(self, ...);
  52.         end
  53.     });
  54. end
Advertisement
Add Comment
Please, Sign In to add comment