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 个以上的用户状态!
我有一个包含特殊用户和普通用户的列表。特殊用户有自己的特殊功能,而普通用户使用标准功能。
我想到了这个代码设计,但我觉得这不是最优的(性能方面)。
所以我的问题是:调用内部函数时如何获得最佳性能,如下例所示?
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 个以上的用户状态!