Lua 是否可以 "halt" 从 table 中执行任何代码?

Lua is it possible to "halt" any code execution from within a table?

关于 Lua 让我感兴趣的一点是,您可以 运行 来自 table 的任何函数,无论它是否 return 是任何东西,我所说的一个例子是:

local my_table = {
    print("output from a table!");
    warn("more output from a table!");
};

有趣的是,一旦创建了这个 table,它里面的两个函数都是 运行,并且 my_table[1] 和 [2] 都等于nil(因为 print 和 warn 没有 return 一个值)。但是,有没有什么办法可以让 "halt" 这两个函数在创建 table 时执行,甚至可能 "start" 运行 以后再执行它们,如果某个条件是遇见与否? 我将不胜感激任何帮助;谢谢

您不是以这种方式将函数存储在 table 中,而是存储调用结果。

如果需要函数,请显式创建匿名函数。

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]()