以下定义已经打印了表中函数的结果:
function plus1(zahl) print(zahl+1) end
function plus2(zahl) print(zahl+2) end
function plus3(zahl) print(zahl+3) end
-- already prints out 6,5,10
local tfunc={plus1(5),plus2(3),plus3(7)}
如何在表格中使用给定参数迭代函数?我想把这些函数称为:
tfunc [1]
打印出6.但它不起作用。
@pschulz,谢谢你给我指路:
local tfunc = {{plus1,5},{plus2,3},{plus3,7}}
tfunc[i][1](tfunc[i][2])
允许使用不同的args通过不同的函数迭代索引i。技巧是表中包含函数名和args的表。
答案 0 :(得分:0)
local tfunc={plus1(5),plus2(3),plus3(7)}
在这里,您可以调用表构造函数中的函数。
因此,一旦您创建了表格,您将打印这些值。由于您的函数没有返回任何内容,因此tfunc保持为空。 您可以将函数调用存储为字符串,让Lua执行该字符串,也可以将函数保存在表中而不调用它。然后你需要一些方法来将函数参数zahl引入函数调用。
对我而言,你想要做的事情毫无意义。
如果您想将其称为tfunc[1]
,则会始终打印6.那么为什么不拨打print(6)
?
如果您想为要打印的号码添加3,请拨打print(number + 3)
,例如
如果您不将简单的算法移动到额外的函数中,您的代码将更易于阅读和理解。
答案 1 :(得分:0)
在你的表中,你当前没有存储任何东西(或三个零)。该表获取函数的返回值,因为您没有返回任何值,所以它为零。
您需要做的是存储功能:
local tfunc = {
plus1,
plus2,
plus3
}
不,你可以这样调用你的函数:
tfunc[1](5)
迭代:如果我理解正确,你想要做以下事情:
local tfunc = {
plus1,
plus2,
plus3
}
local tvalues = { 5, 3, 7 }
for i, func in ipairs(tfunc) do
func(tvalues[i])
end
因此您必须将值保存在另一个表中。有更优雅的方法可以做到这一点,我建议您阅读closures。