Lua - 函数的基本表格

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

点赞
用户1442917
用户1442917
本文中,您正在将函数的结果分配给表,而不是函数引用。您应该这样做:

local tab = { qwe, asd, }


如果您需要调用这些值,可以将它们用作函数:

tab [1]() - 调用“qwe”并丢弃结果 -或 tab [2]() - 调用“asd”并丢弃结果 -或者 for k,v in pairs(tab)do 返回v()-调用第一个函数并返回其结果 end

```

2018-01-23 04:42:25
用户1434791
用户1434791

以下是基于Paul答案的两种解决方案。

  • 直接加载函数
function foo()
    print("foo被触发")
end

function goo()
    print("goo被触发")
end

function poo()
    print("poo被触发")
end

local roo = {
    "foo()",
    "goo()",
    "poo()",
}

function zoo ()
    print("\n ***** 直接加载函数 *****")
    for k,v in pairs (roo) do
        print(k,v)
        load(v)()
    end
print(" *** 结束 ***\n\n")
end
  • 加载连接的字符串
function foo()
    print("foo被触发")
end

function goo()
    print("goo被触发")
end

function poo()
    print("poo被触发")
end

local roo = {
    "foo",
    "goo",
    "poo",
}

function zoo ()
    print("\n ***** 加载连接的字符串 *****")
    for k,v in pairs (roo) do
        print(k,v)
        load(v.."()")()
    end
    print(" *** 结束 ***\n\n")
end
2018-01-24 05:14:40