我有一个包含特殊用户和普通用户的列表。特殊用户有自己的特殊功能,而普通用户使用标准功能。
我想出了这个代码设计,但我觉得这不是最佳的(性能明智)。
所以我的问题是:在调用内部函数时如何获得最佳性能,如下例所示?
if something then
CallFunc(var)
end
特殊/普通用户逻辑
function CallFunc(var)
if table[name] then
table[name](var)
else
Standard_Func(var)
end
end
local table = {
["name1"] = function(var) Spec_Func1(var) end,
["name2"] = function(var) Spec_Func2(var) end,
["name3"] = function(var) Spec_Func3(var) end,
...
--40 more different names and different funcs
}
特殊用户功能
function Spec_Func1(var)
--lots of code
end
function Spec_Func2(var)
--lots of code
end
...
--more funcs
修改 见@ hjpotter92的回答:
我无法在表格中找到该用户。
local function_lookups = {
name1 = Spec_Func1, --this doesnt let me find the user
--name1 = 1 --this does let me find the user (test)
}
if function_lookups[name] then --this fails to find the user
--do something
end
答案 0 :(得分:1)
您不需要其他匿名功能。只需使用查找表,如下所示:
local function_lookups = {
name1 = Spec_Func1,
name2 = Spec_Func2,
name3 = Spec_Func3,
...
--40 more different names and different funcs
}
请勿使用变量名table
。在Lua本身是library available,你正在覆盖它。
答案 1 :(得分:0)
您根本不需要特殊功能!您可以使用通用函数,其行为取决于调用者! Lemme用一段代码解释:
local Special = {Peter=function(caller)end} --Put the special users' functions in here
function Action(caller)
if Special[caller] then
Special[caller](caller)
else
print("Normal Action!")
end
end
因此,每当用户执行某个操作时,您可以触发此函数并传递调用者参数,然后该函数在幕后执行确定调用者是否特殊的工作,如果是,则执行该操作。
这使您的代码变得干净。它还可以更轻松地添加2个以上的用户状态!