Lua - 基本 Table 函数
Lua - Basic Table of Functions
我正在尝试了解 Lua table 函数如何正确工作。
我希望能够定义函数,然后在 table 中列出这些函数,这样当我遍历 table 时,我可以 运行 每个函数。
这是我的代码:
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),而且大多数参考资料和示例似乎都依赖于在我缺乏的基本理解上。
local tab = {
qwe(),
asd(),
}
您正在将函数的 结果 分配给 table 而不是函数引用。你应该这样做:
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
这是我根据 Paul 的回答得出的 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
我正在尝试了解 Lua table 函数如何正确工作。
我希望能够定义函数,然后在 table 中列出这些函数,这样当我遍历 table 时,我可以 运行 每个函数。
这是我的代码:
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),而且大多数参考资料和示例似乎都依赖于在我缺乏的基本理解上。
local tab = {
qwe(),
asd(),
}
您正在将函数的 结果 分配给 table 而不是函数引用。你应该这样做:
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
这是我根据 Paul 的回答得出的 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