lua 中的内部函数性能

Inner function performance in lua

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

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

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

if something then
  CallFunc(var)
end

Special/normal 用户逻辑

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 的回答:

我在 table 中找不到用户。

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

您不需要另一个匿名函数。只需使用查找 table 如下:

local function_lookups = {
  name1 = Spec_Func1,
  name2 = Spec_Func2,
  name3 = Spec_Func3,
  ...
  --40 more different names and different funcs
}

不要使用变量名table。它是 Lua 本身中的 library available,而您正在覆盖它。

您根本不需要特殊功能!您可以使用行为取决于调用者的通用函数!让我用一段代码解释一下:

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