Advertisement
Guest User

Class Module

a guest
Aug 22nd, 2019
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.19 KB | None | 0 0
  1. local Class = {Name = "Class", Parents = {}}
  2.  
  3. function Class.ClassConstructor(class)
  4. function class:New(classConstructor, constructor, otherParents)
  5. local newClass =
  6. {
  7. ClassConstructor = function(newClass, ...)
  8. newClass.Parent = class
  9. local parents = {class, otherParents}
  10. newClass.Parents = parents
  11. for i = 1, #parents do
  12. parents[i].ClassConstructor(newClass, ...)
  13. newClass.Ancestors[parents[i]] = true
  14. end
  15. classConstructor(newClass, ...)
  16. newClass.constructor = constructor
  17. newClass.new = constructor and
  18. function(...)
  19. local instance = setmetatable({}, newClass)
  20. constructor(instance, ...)
  21. return instance
  22. end
  23. or function() return setmetatable({}, newClass) end
  24. end;
  25. }
  26.  
  27. newClass.ClassConstructor(newClass)
  28. return newClass
  29. end
  30.  
  31. function class:Is(other)
  32. return self.Ancestors[other]
  33. end
  34.  
  35. function class:ToTable()
  36. self.Parent = nil
  37. return setmetatable(self, nil)
  38. end
  39.  
  40. function class:FromTable(t)
  41. t.Parent = self
  42. return setmetatable(t, self)
  43. end
  44.  
  45. class.Ancestors = {}
  46. class.Class = class
  47. class.__index = class
  48. end
  49.  
  50. Class.ClassConstructor(Class)
  51.  
  52. return Class
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement