如何遍历表以调用其中存储的每个函数? (卢阿)
Posted
技术标签:
【中文标题】如何遍历表以调用其中存储的每个函数? (卢阿)【英文标题】:How Do I Iterate Through a Table to Call Each Function Stored In It? (Lua) 【发布时间】:2021-10-04 22:53:59 【问题描述】:我怎样才能使这段代码工作?它应该打印“Function a”然后是“Function b”,但它给了我错误。这是我想在主文件中迭代的模块中有一堆函数的其他一些文件的做法。
--stuff for module ----------------------
local funcs =
function funcs.a()
print("Function a")
end
function funcs.b()
print("Function b")
end
return funcs
-- stuff for main file---------------
for k,v in pairs(funcs) do
funcs[k]()
end
编辑:我试图让这段代码在一个文件中作为测试工作。一旦成功,我计划将这些片段移动到两个不同的文件中。
如果我将以下代码全部放在一个文件中,为什么它会给我错误 '
local funcs =
function funcs.a()
print("Function a")
end
function funcs.b()
print("Function b")
end
return funcs
for k,v in pairs(funcs) do
v()
end
【问题讨论】:
你是如何在主文件中初始化变量funcs
的?
目前只有一个文件。在弄清楚如何使其工作后,我打算将它们分为主模块和模块。
error 'return funcs
不在函数中。- 删除或注释掉它。另一件事是for do end
没有检查v
的类型,这不是很好的风格。为它做一个简单的条件:if type(v)=='function' then v() end
returns funcs
只有在您实际将代码放入单独的模块文件时才应该存在。在return
语句之后,在当前范围内没有执行任何操作。并且编译器不希望在同一范围内返回后看到任何关键字。这就是为什么你得到编译器错误eof expected
(eof = end of file)
【参考方案1】:
如果没有错误,我们真的帮不了那么多,但我猜这是与 func
是模块文件中的局部变量有关的问题。
如果您的模块如下所示:
module.lua
local funcs =
function funcs.a()
print("Function a")
end
function funcs.b()
print("Function b")
end
return funcs
你的主要看起来像这样:
main.lua
dofile("module.lua")
for k,v in pairs(funcs) do
funcs[k]()
end
main.lua
中的变量funcs
将是nil
。
要使用模块的返回值,您必须在加载模块时在 main 中分配一个新变量:
main.lua
-- you can name this variable however you like
local funcs = dofile("module.lua")
for k, v in pairs(funcs) do
-- you can also use the value directly instead of func[k]
v()
end
【讨论】:
我试图运行我在同一个文件中发布的代码。我提到模块的事情是为了澄清我未来实现代码的计划。 @Tailcoat 如果当前在同一个文件中,return funcs
之后的代码将不会被执行【参考方案2】:
k
是key,包含函数名,v
是value,包含函数代码。
函数是Lua
中的一等公民,所以你可以简单地写:
for k,v in pairs(funcs) do
v()
end
它将显示:
Function a
Function b
【讨论】:
以上是关于如何遍历表以调用其中存储的每个函数? (卢阿)的主要内容,如果未能解决你的问题,请参考以下文章
如何使用一个类来存储在不同函数中更新的变量,然后在不同的函数中调用这些更新的变量?