码:
local ipairs = ipairs -- why set this ipairs as local?
local Access = {}
function Access.find_access_tag(source,access_tags_hierarchy)
for i,v in ipairs(access_tags_hierarchy) do
local tag = source:get_value_by_key(v)
if tag then
return tag
end
end
return nil
end
return Access
Run Code Online (Sandbox Code Playgroud)
我还没有看到将ipairs定义为本地的。我试图从互联网上找到它,但是没有发现任何有用的东西。任何意见,不胜感激。
除非例如在模块中使用它,否则所提供的代码不会有任何区别。
在Lua中,使用局部变量比使用全局变量更快。这就是为什么您应该尽可能使用局部变量的原因之一。
local sin = math.sin
for i = 1, 1000000 do
local x = sin(1)
end
Run Code Online (Sandbox Code Playgroud)
比大约快30%
for i = 1, 1000000 do
local x = math.sin(1)
end
Run Code Online (Sandbox Code Playgroud)
但是作为
for var_1, ···, var_n in explist do block end
Run Code Online (Sandbox Code Playgroud)
等效于代码:
do
local f, s, var = explist
while true do
local var_1, ···, var_n = f(s, var)
if var_1 == nil then break end
var = var_1
block
end
end
Run Code Online (Sandbox Code Playgroud)
explist仅被评估一次,因此在ipairs本地
验证的简单示例:
local ipairs = function(t) print("ipairs called") return ipairs(t) end
for i,v in ipairs({1,2,3}) do end
Run Code Online (Sandbox Code Playgroud)
只会打印一次“已配对”。
但是,如果您Access.find_access_tag经常打来电话,它可能会有所回报,因为您将从更快的配对中受益。