如何迭代通过表来调用其中存储的每个函数?(Lua)

如何使这段代码工作?它应该打印出“Function a”然后是“Function b”,但是它给了我错误。这是为我想要在主文件中迭代通过模块中存储的一堆函数练习的其他文件。

-- 模块的内容 ----------------------
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
    funcs[k]()
end

编辑:我正在尝试使这段代码在一个文件中工作作为测试。一旦成功,我打算将这些部分移动到两个不同的文件中。

如果我将以下代码全部放在一个文件中,为什么它会给我错误 **'for' 附近期望 ''**?

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
点赞
用户10953006
用户10953006

k 是键,包含函数名称,v 是值,包含函数代码。

Lua 中,函数是第一类公民,所以您可以简单地编写:

for k,v in pairs(funcs) do
  v()
end

它会显示:

Function a
Function b
2021-07-29 09:44:42
用户4515989
用户4515989

原文

Without an error we can't really help that much, but I guess it's a problem related to func being a local variable in your module file.

If your module looks like this: module.lua

local funcs = {}

function funcs.a()
    print("Function a")
end

function funcs.b()
    print("Function b")
end

return funcs

And your main looks like this: main.lua

dofile("module.lua")

for k,v in pairs(funcs) do
    funcs[k]()
end

The variable funcs in your main.lua will be nil. To use the returned value from the module, you have to assign a new variable in your main when loading the module:

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

翻译

如果没有错误,我们就很难提供帮助,但我猜这是与 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.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
2021-07-29 10:51:42