Lua - 基本功能表

时间:2018-01-23 01:44:27

标签: lua lua-table

我试图理解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),而且大多数参考和例子似乎都依赖于我的基本理解我缺乏。

2 个答案:

答案 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