带arg的Lua函数通过arg传递给另一个函数

时间:2015-11-09 16:20:06

标签: function lua

这是我想要做的事情的原始想法。

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,所以接下来将被执行,以避免只执行其中的一些并且不会运行到最后一个。

2 个答案:

答案 0 :(得分:3)

你需要关闭。

在您的代码中,函数abc都执行并且不返回任何内容。相反,返回一个完成工作的闭包(但暂时不执行):

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"})