Lua中的内部函数性能

我有一个特殊用户和普通用户列表。特殊用户有自己专门的函数,而普通用户使用标准函数。

我想到了这样的代码设计,但我觉得这不是最优的(性能方面)。

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

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个不同的名称和不同的函数
}

特殊用户函数

function Spec_Func1(var)
--许多代码
end

function Spec_Func2(var)
--许多代码
end
...
--更多函数

编辑: 请参见@hjpotter92的答案:

我找不到表中的用户。

local function_lookups = {
  name1 = Spec_Func1,--这使我不能找到用户
  --name1 = 1 --这确实让我找到用户(测试)
}

如果function_lookups[name],这将无法找到用户
  --做一些事情
end
点赞
用户1190388
用户1190388

你不需要另一个匿名函数。只需要像下面这样使用查找表:

local function_lookups = {
  name1 = Spec_Func1,
  name2 = Spec_Func2,
  name3 = Spec_Func3,
  ...
  --还有40个不同的名字和不同的函数
}

请不要使用变量名 table。它是 Lua 中的可用库,你会覆盖它。

2016-09-30 18:17:44
用户3979429
用户3979429

你根本不需要一个特殊的函数!你可以使用一个通用的函数,其行为取决于调用者!让我用一段代码来解释:

local Special = {Peter=function(caller)end} --将特殊用户的函数放在这里
function Action(caller)
    if Special[caller] then
        Special[caller](caller)
    else
        print("Normal Action!")
    end
end

因此,每当一个用户执行某个操作时,你可以调用这个函数并传递一个调用者参数,函数将在后台执行工作,确定是否是特殊调用者,如果是,则做什么。

这使得你的代码更加清晰。它也使得添加超过两个用户状态变得更加容易!

2016-10-03 03:01:33