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