lua内部功能表现

时间:2016-09-30 18:06:51

标签: performance function lua lua-table lookup-tables

我有一个包含特殊用户和普通用户的列表。特殊用户有自己的特殊功能,而普通用户使用标准功能。

我想出了这个代码设计,但我觉得这不是最佳的(性能明智)。

所以我的问题是:在调用内部函数时如何获得最佳性能,如下例所示?

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

2 个答案:

答案 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个以上的用户状态!