struct.lua 621 B

123456789101112131415161718192021222324252627282930313233343536
  1. -- 不支持继承,主要用于模拟类的封装特性
  2. -- 允许序列化,等同于table
  3. local _class = {}
  4. local function struct()
  5. local classtype = {}
  6. classtype.ctor = false
  7. classtype.new = function(...)
  8. local obj = {}
  9. do
  10. local create
  11. create = function(c, ...)
  12. if c.ctor then
  13. c.ctor(obj, ...)
  14. end
  15. end
  16. create(classtype, ...)
  17. end
  18. setmetatable(obj, {__index = _class[classtype]})
  19. return obj
  20. end
  21. local vtbl = {}
  22. _class[classtype] = vtbl
  23. setmetatable(classtype, {__newindex =
  24. function(t, k, v)
  25. vtbl[k] = v
  26. end
  27. })
  28. return classtype
  29. end
  30. return struct