Guest User

Untitled

a guest
Jan 22nd, 2018
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.90 KB | None | 0 0
  1. local classes = {}
  2. local registry = {}
  3.  
  4. function classes.createClass(classname)
  5. local class = {}
  6. class.__views = {}
  7. registry[classname] = class
  8. return class
  9. end
  10.  
  11. function classes.createInstance(classname)
  12. local class = registry[classname];
  13. local inst = {}
  14. local meta = {}
  15. meta.__index = function(inst, key)
  16. return classes.indexClass(inst, class, key)
  17. end
  18. setmetatable(inst, meta)
  19. return inst
  20. end
  21.  
  22. function classes.indexClass(inst, class, key)
  23. local view = getmetatable(inst).__view
  24. if view then
  25. local view = class.__views[view];
  26. if view[key] then
  27. return class[key]
  28. else
  29. error("not in view")
  30. end
  31. else
  32. return class[key]
  33. end
  34. end
  35.  
  36. function classes.createView(classname, viewname)
  37. local class = registry[classname]
  38. local view = {}
  39. class.__views[viewname] = view
  40. return view
  41. end
  42.  
  43. function classes.setInstanceView(instance, view)
  44. getmetatable(instance).__view = view
  45. end
  46.  
  47. return classes
Add Comment
Please, Sign In to add comment