Advertisement
Symmetryc

Implemented __len

Nov 10th, 2013
163
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 0.81 KB | None | 0 0
  1. local map = {}
  2. local function mod_pairs(_t)
  3.     local t = {}
  4.     for k, v in pairs(_t) do
  5.         t[#t + 1] = k
  6.     end
  7.     local i = 0
  8.     return function()
  9.         i = i + 1
  10.         return t[i], _t[t[i]]
  11.     end
  12. end
  13. local copy = function(_t)
  14.     local t = {}
  15.     for k, v in pairs(_t) do
  16.         t[k] = type(v) == "table" and copy(v) or v
  17.     end
  18.     return t
  19. end
  20. local sm = function(_t, _mt)
  21.     map[_t] = setmetatable(copy(_t), _mt)
  22.     for k, v in mod_pairs(_t) do
  23.         _t[k] = nil
  24.     end
  25.     for i = 1, _mt.__len or #_t do
  26.         _t[i] = {}
  27.     end
  28.     return setmetatable(_t, {
  29.         __index = map[_t];
  30.         __newindex = function(self, key, value)
  31.             map[_t][key] = value
  32.         end;
  33.     })
  34. end
  35.  
  36. -- Testing
  37. local lentest = sm({1, 3, 4, 3, 43, 34, 3}, {__len = 0}) -- setting the __len to 0
  38. print(#lentest) --> 0
  39. lentest[5] = 7
  40. print(lentest[5]) --> 7
  41. print(#lentest) --> 0
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement