diff options
Diffstat (limited to 'data/core/object.lua')
| -rw-r--r-- | data/core/object.lua | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/data/core/object.lua b/data/core/object.lua new file mode 100644 index 00000000..af41b7e9 --- /dev/null +++ b/data/core/object.lua @@ -0,0 +1,58 @@ +local Object = {} +Object.__index = Object + + +function Object:new() +end + + +function Object:extend() + local cls = {} + for k, v in pairs(self) do + if k:find("__") == 1 then + cls[k] = v + end + end + cls.__index = cls + cls.super = self + setmetatable(cls, self) + return cls +end + + +function Object:implement(...) + for _, cls in pairs({...}) do + for k, v in pairs(cls) do + if self[k] == nil and type(v) == "function" then + self[k] = v + end + end + end +end + + +function Object:is(T) + local mt = getmetatable(self) + while mt do + if mt == T then + return true + end + mt = getmetatable(mt) + end + return false +end + + +function Object:__tostring() + return "Object" +end + + +function Object:__call(...) + local obj = setmetatable({}, self) + obj:new(...) + return obj +end + + +return Object |
