云风的个人空间 : Comment59

首页 :: 索引 :: 修订历史 :: 你好, 216.73.216.244
你的足迹: » Lua 函数重载
这是一个 ChenZiFeng?Lua 函数重载于2011-09-18 01:04:17写下的留言.
参考云风实现重载方式,自己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