Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- local obj = {}
- local meta = {}
- local functions = {}
- local function equals(t,tt)
- if(#t ~= #tt) then return false end
- for k,v in ipairs(t) do if(v ~= tt[k]) then return false end end
- return true
- end
- local function call(t,name)
- local newFun = false
- local ar = false
- local name = name
- local f1 = function(fun)
- newFun = fun
- local f2 = function(args)
- ar = args
- functions[name] = functions[name] or {}
- table.insert(functions[name],{args,newFun})
- end
- return f2
- end
- return f1
- end
- local function resolve(t,name)
- if(not functions[name]) then return nil end
- local res = function(...)
- local arguments = {}
- for k,v in pairs({...}) do
- table.insert(arguments,type(v))
- end
- for k,v in pairs(functions[name]) do
- if(equals(v[1],arguments)) then
- return v[2](unpack({...}))
- end
- end
- return nil
- end
- return res
- end
- meta.__call = call
- meta.__index = resolve
- meta.__newindex = function() end
- meta.__metatable = {}
- obj = setmetatable(obj,meta)
- return obj
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement