Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua-基本函数表_Lua_Lua Table - Fatal编程技术网

Lua-基本函数表

Lua-基本函数表,lua,lua-table,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 pair

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

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

以下是我根据保罗的答案提出的两个解决方案

--直接加载函数

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

谢谢你的回答,保罗。根据你的回答,我现在有两个解决方案。我将把这两个问题都添加到我的原始问题中。