参考云风实现重载方式,自己YY了一下
_G.
index=function(t,key)
- return getCall(t,key)
end
setmetatable(_G,_G);
local functionList={}
local callList={}
function getParamKey(param,isGetType)
- local keyString
if param
nil or (param and #param
0 ) then -- 处理空参数
- return "nil"
end
for i=1,#param do
- if keyString
nil then
if isGetType then
keyString = type(param[i])
else
keyString = param[i]
end
else
if isGetType then
keyString = keyString..","..type(param[i])
else
keyString = keyString..","..param[i]
end
end
end
return keyString
end
function register(funName,param,fun)
if functionList[funName]
nil then
functionList[funName]={}
end
functionList[funName][getParamKey(param)] = fun
if callList[funName] then return end
local call =function(...)
- local callHandler = functionList[funName][getParamKey(arg,true)]
if callHandler
nil then
-- 处理不定参
callHandler = functionList[funName]["..."]
if callHandler
nil then
- local paramList=""
for i=1,#arg do
- paramList = paramList .. type(arg[i])
callHandler = functionList[funName][paramList.. "," .. "..."]
if callHandler then
- do break end
end
end
end
end
callHandler(unpack(arg))
end
callList[funName]=call
end
register("say",nil,function()
- print("执行了")
end)
register("say",{"string"},function(str)
- print(str)
end)
register("say",{"number"},function(num)
- print(num)
end)
register("say",{"number","number","number"},function(num,num1,num2)
- print(num)
end)
register("say",{"string","string"},function(str,str2)
- print(str,str2)
end)
register("say",{"table","string"},function(t,str2)
- print(t,str2)
end)
register("say",{"string","..."},function(str,...)
- print(str,arg)
end)
register("kao",{"string"},function(str)
- print(str)
end)
--[[register("say",{"..."},function(ta,str2)
print(ta,str2)
end)--]]
function getCall(t,key)
- if functionList[key] then
- return callList[key]
end
return t[key]
end
say()
say("asdasd")
say(2)
say(1,2,3)
say("asdsad","asdsad123")
say({"123"},"asdsad123")
say("123","asdsad123",1,23,231,3,213,21,3,213)
kao("我爱你中国")
有建议给我发邮箱82799232@qq.com