Advertisement
Freack100

Lua Overload

Apr 29th, 2016
175
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.07 KB | None | 0 0
  1. local obj = {}
  2. local meta = {}
  3. local functions = {}
  4.  
  5. local function equals(t,tt)
  6.   if(#t ~= #tt) then return false end
  7.   for k,v in ipairs(t) do if(v ~= tt[k]) then return false end end
  8.   return true
  9. end
  10.  
  11. local function call(t,name)
  12.   local newFun = false
  13.   local ar = false
  14.   local name = name
  15.   local f1 = function(fun)
  16.     newFun = fun
  17.     local f2 = function(args)
  18.       ar = args
  19.       functions[name] = functions[name] or {}
  20.       table.insert(functions[name],{args,newFun})
  21.     end
  22.     return f2
  23.   end
  24.   return f1
  25. end
  26.  
  27. local function resolve(t,name)
  28.   if(not functions[name]) then return nil end
  29.   local res = function(...)
  30.     local arguments = {}
  31.     for k,v in pairs({...}) do
  32.       table.insert(arguments,type(v))
  33.     end
  34.     for k,v in pairs(functions[name]) do
  35.       if(equals(v[1],arguments)) then
  36.         return v[2](unpack({...}))
  37.       end
  38.     end
  39.     return nil
  40.   end
  41.   return res
  42. end
  43.  
  44. meta.__call = call
  45. meta.__index = resolve
  46. meta.__newindex = function() end
  47. meta.__metatable = {}
  48.  
  49. obj = setmetatable(obj,meta)
  50. return obj
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement