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