Bolodefchoco_LUAXML

[Function] makeMeta [Table]

Sep 30th, 2016
340
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.35 KB | None | 0 0
  1. --Creator: Bolodefchoco
  2. --Made in: 30/09/2016
  3. --Last update: 30/09/2016
  4. --[[ Notes:
  5.     Does:
  6.         Uma coleção de metas para sua tabela (Adição, Subtração, Multiplicação e Unário)
  7.     Args:
  8.         list --> Tabela
  9.     Example:
  10.         {1,2,3} + 4 = {1,2,3,1,2,3,1}
  11.         {1,2,3} - 1 = {1,2}
  12.         {1,2,3} * 2 = {1,2,3,1,2,3}
  13.         -{1,2,-3,"a"} = {-1,-2,3,"a"}
  14. ]]--
  15.  
  16. do
  17.     local collect = function(a,b)
  18.         if type(a) == "table" then return a,b else return b,a end
  19.     end
  20.     meta = {
  21.         __add = function(v1,v2)
  22.             v1,v2 = collect(v1,v2)
  23.             local list,real = {},{}
  24.             for i = 1,v2 do
  25.                 list[#v1 + i] = v1[i]
  26.             end
  27.             for i = 1,#v1+v2 do
  28.                 real[i] = (i<=#v1 and v1[i] or list[i])
  29.             end
  30.             return real
  31.         end,
  32.         __sub = function(v1,v2)
  33.             v1,v2 = collect(v1,v2)
  34.             local real = {}
  35.             for k,v in next,v1 do
  36.                 if #real <= v2 then
  37.                     real[k] = v
  38.                 else
  39.                     break
  40.                 end
  41.             end
  42.             return real
  43.         end,
  44.         __mul = function(v1,v2)
  45.             v1,v2 = collect(v1,v2)
  46.             local real = {}
  47.             for i = 1,v2 do
  48.                 for k,v in next,v1 do
  49.                     real[#real + 1] = v
  50.                 end
  51.             end
  52.             return real
  53.         end,
  54.         __unm = function(v1)
  55.             local real = {}
  56.             for k,v in next,v1 do
  57.                 if type(tonumber(v)) == "number" then
  58.                     real[k] = -v
  59.                 else
  60.                     real[k] = v
  61.                 end
  62.             end
  63.             return real
  64.         end
  65.     }
  66.     makeMeta = function(list)
  67.         return setmetatable(list,meta)
  68.     end
  69. end
Advertisement
Add Comment
Please, Sign In to add comment