Lua中是否可能从表格内部“停止”任何代码执行?

Lua中让我感到好奇的是,您可以从表格内运行任何函数,无论它是否返回任何值,例如:

local my_table = {
    print("来自表格的输出!");
    warn("来自表格的更多输出!");
};

有趣的是,一旦创建了此表格,它内部的两个函数都将运行,并且both my_table[1]和[2]都等于nil(因为print和warn不返回任何值)。但是,有没有办法在创建表格时“停止”两个函数的执行,如果满足特定的条件,则可能甚至“开始”运行它们? 我会感激任何帮助; 谢谢

点赞
用户5675002
用户5675002

你并不是在表中存储函数,而是存储函数调用的结果。

如果需要函数,请明确创建匿名函数。

local mytable = {
    function() print("output from a table!") end,
    function() warn("more output from a table!") end
}

如果您不喜欢这种方式,还有另一种方法。在词法闭包中捕获函数和参数,并在调用闭包时应用存储的参数。

local function delay(func, ...)
    local args = {...}
    return function()
        func(table.unpack(args))
    end
end

local mytable = {
    delay(print, "output from a table!"),
    delay(warn, "more output from a table!")
}

mytable[1]()
mytable[2]()
2017-07-13 19:10:41