Lua - 执行存储在表中的函数

bra*_*n56 6 lua function-pointers function lua-table

我能够将函数存储到表中.但现在我不知道如何调用它们.最终表将有大约100个调用,所以如果可能的话,我想像在foreach循环中一样调用它们.谢谢!

以下是表的定义方式:

game_level_hints = game_level_hints or {}
game_level_hints.levels = {}
game_level_hints.levels["level0"] = function()
    return
    {
        [on_scene("scene0")] =
        {
            talk("hint0"),
            talk("hint1"),
            talk("hint2")
        },
        [on_scene("scene1")] =
        {
            talk("hint0"),
            talk("hint1"),
            talk("hint2")
        }
    }
end
Run Code Online (Sandbox Code Playgroud)

Aaand函数定义:

function on_scene(sceneId)
    -- some code
    return sceneId
end

function talk(areaId)
    -- some code
    return areaId
end
Run Code Online (Sandbox Code Playgroud)

编辑:

我修改了函数,因此它们会有更多的上下文.基本上,他们现在返回字符串.而我希望发生的是,在调用函数的最后,我将有一个包含所有这些字符串的表(理想情况下是level表).

Pau*_*nko 7

简短回答:要调用存储在数组中的函数(引用),您只需添加(parameters),就像通常那样:

local function func(a,b,c) return a,b,c end
local a = {myfunc = func}
print(a.myfunc(3,4,5)) -- prints 3,4,5
Run Code Online (Sandbox Code Playgroud)

实际上,您可以将其简化为

local a = {myfunc = function(a,b,c) return a,b,c end}
print(a.myfunc(3,4,5)) -- prints 3,4,5
Run Code Online (Sandbox Code Playgroud)

答案很长:你没有描述你的预期结果是什么,但是你所写的内容很可能符合你的预期.拿这个片段:

game_level_hints.levels["level0"] = function()
    return
    {
        [on_scene("scene0")] =
        {
            talk("hint0"),
        }
    }
end
Run Code Online (Sandbox Code Playgroud)

[ 问题更新后,此段落不再适用 ] 您的参考on_scenetalk功能,但您没有在表格中"存储"这些功能(因为您在问题中明确引用它们,我认为问题是关于这些功能) .实际上,你调用这些函数和存储他们返回(他们都返回的值nil),所以执行这个片段时,你会得到"表索引是零"的错误,你正在尝试存储nil使用nil的指标.

如果你想调用你存储的函数game_level_hints.levels["level0"],你就可以了game_level_hints.levels["level0"]()


bra*_*n56 5

根据你们的回答和评论,我能够提出以下代码作为解决方案:

asd = game_level_hints.levels["level0"]()
Run Code Online (Sandbox Code Playgroud)

现在,asd包含我需要的区域字符串。尽管理想情况下,我希望能够访问以下数据:

asd[1][1]
Run Code Online (Sandbox Code Playgroud)

像这样访问它:

asd["scene0"][1]
Run Code Online (Sandbox Code Playgroud)

检索区域数据就足够了。我只需要解决按键问题。

多谢你们。