Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function get(self)
- self = self or {};
- meta = getmetatable(self) or {};
- return meta;
- end
- function set(self, meta)
- self = self or {};
- meta = meta or {};
- self = setmetatable(self, meta);
- return self;
- end
- function mod(self, meta, override)
- self = self or {};
- meta = meta or {};
- smt = get(self);
- for mk, mv in pairs(meta) do
- if override then
- smt[mk] = mv; else
- smt[mk] = smt[mk] or mv; end
- end; return set(self, smt);
- end
- function clear(self)
- self = self or {};
- return set(self);
- end
- function setIndex(self, ...)
- newindex = get(self).index or {};
- for ik, iv in pairs({...}) do
- newindex[ik] = iv;
- end
- return mod(self, {
- index = newindex;
- __index = function(object, key)
- local omt = getmetatable(object) or {};
- for _, s in pairs(omt.index or {}) do
- if s[key] then return s[key] end
- end
- end
- });
- end
- function setCall(self, call)
- return mod(self, {
- __call = function(self, ...)
- return call(self, ...);
- end
- });
- end
Advertisement
Add Comment
Please, Sign In to add comment