这是我想要做的事情的原始想法。
function a(str)
print(str)
end
function b(str)
print(str)
end
function c(str)
print(str)
end
function runfunctions(...)
local lst = {...}
lst.startup()
end
local n1 = a('1')
local n2 = b('2')
local n3 = c('3')
runfunctions(n3,n1,n2)
很少有函数作为args传递给其他函数并按顺序执行。一旦它们中的任何一个被执行,就不能执行msec,所以接下来将被执行,以避免只执行其中的一些并且不会运行到最后一个。
答案 0 :(得分:3)
你需要关闭。
在您的代码中,函数a
,b
和c
都执行并且不返回任何内容。相反,返回一个完成工作的闭包(但暂时不执行):
function a(str)
return function() print(str) end
end
然后在需要时执行该功能:
function runfunctions(...)
for _, v in ipairs{...} do
v()
end
end
答案 1 :(得分:2)
function runfunctions(...)
for _, f_with_args in ipairs{...} do
pcall((table.unpack or unpack)(f_with_args))
end
end
runfunctions({c, '3'}, {a, '1'}, {b, '2'}, {print, "Hello", "world"})