清华大佬耗费三个月吐血整理的几百G的资源,免费分享!....>>>
function overloaded() local fns = {} local mt = {} local function oerror() return error("Invalid argument types to overloaded function") end function mt:__call(...) local argv = {...} local default = self.default local signature = {} for i,arg in ipairs {...} do signature[i] = type(arg) end signature = table.concat(signature, ",") return (fns[signature] or self.default)(...) end function mt:__index(key) local signature = {} local function __newindex(self, key, value) print(key, type(key), value, type(value)) signature[#signature+1] = key fns[table.concat(signature, ",")] = value print("bind", table.concat(signature, ", ")) end local function __index(self, key) print("I", key, type(key)) signature[#signature+1] = key return setmetatable({}, { __index = __index, __newindex = __newindex }) end return __index(self, key) end function mt:__newindex(key, value) fns[key] = value end return setmetatable({ default = oerror }, mt) end