我试图理解Lua函数表是如何正常工作的。
我希望能够定义函数,然后在表中列出这些函数,这样当我遍历表时,我可以运行每个函数。
这是我的代码:
function qwe()
print ("qwe fired")
end
function asd()
print ("asd fired")
end
local tab = {
qwe(),
asd(),
}
function zxc()
print ("zxc start")
for k,v in pairs (tab) do
return v
end
print ("zxc end")
end
我知道这很可能是非常基本的东西,但我没有真正的编程背景,(我正在尝试自学Lua),而且大多数参考和例子似乎都依赖于我的基本理解我缺乏。
答案 0 :(得分:2)
local tab = {
qwe(),
asd(),
}
您正在将函数的结果分配给表而不是函数引用。你应该这样做:
local tab = {
qwe,
asd,
}
如果您需要调用这些值,只需将它们用作函数:
tab[1]() -- call `qwe` and discard results
-- or
tab[2]() -- call `asd` and discard results
-- or
for k,v in pairs (tab) do
return v() -- call first function and return its result(s)
end
答案 1 :(得分:0)
以下是基于保罗答案的2个解决方案。
- 直接加载函数
function foo()
print("foo fired")
end
function goo()
print("goo fired")
end
function poo()
print("poo fired")
end
local roo = {
"foo()",
"goo()",
"poo()",
}
function zoo ()
print("\n ***** load function directly *****")
for k,v in pairs (roo) do
print(k,v)
load(v)()
end
print(" *** end ***\n\n")
end
- 加载连接字符串
function foo()
print("foo fired")
end
function goo()
print("goo fired")
end
function poo()
print("poo fired")
end
local roo = {
"foo",
"goo",
"poo",
}
function zoo ()
print("\n ***** load concatenated string *****")
for k,v in pairs (roo) do
print(k,v)
load(v.."()")()
end
print(" *** end ***\n\n")
end