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

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

以下是如何定义表:

game_level_hints = game_level_hints或者{}
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

和函数定义:

function on_scene(sceneId)
    -- 一些代码
    return sceneId
end

function talk(areaId)
    -- 一些代码
    return areaId
end

编辑:

我修改了函数,这样它们将有更多的上下文,基本上,它们现在返回字符串。**我希望的是,在调用函数的结尾处,我将拥有一个表(理想情况下是levels表),其中包含所有这些字符串。 **

点赞
用户234175
用户234175

这并不是很清楚你试图做什么。在匿名函数中,你正在返回一个使用 on_scene 的返回值作为键的表。但是你的 on_scene 没有返回任何内容。talk 也是一样。

我假设你想在调用 game_level_hints 表中的每个级别时调用 on_scenetalk

如果是这样,你可以这样做:

local maxlevel = 99
for i = 0, maxlevel do
  game_level_hints.levels["level" .. i] = function()
    on_scene("scene" .. i)
    talk("hint" .. i)
  end
end
-- ...
for levelname, levelfunc in pairs(game_level_hints.levels) do
  levelfunc()
end
2013-06-17 02:12:14
用户1442917
用户1442917

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

local function func(a, b, c) return a, b, c end
local a = {myfunc = func}
print(a.myfunc(3, 4, 5)) -- 输出 3,4,5

实际上,你可以简化成这样

local a = {myfunc = function(a,b,c) return a,b,c end}
print(a.myfunc(3,4,5)) -- 输出 3,4,5

详细回答:你没有描述你的期望结果,但是你所写的可能 能实现你的期望。看看这个片段:

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

[ _这段文字在问题更新后已经不适用_] 你引用了 on_scenetalk 函数,但是你没有在表里“存储”这些函数(因为你在问题中明确引用了它们,我假设这个问题是关于 这些 函数的)。你实际上在调用这些函数并存储它们返回的值(它们都返回 nil),因此当这个片段被执行时,你会得到“表索引为 nil”的错误,因为你试图使用 nil 作为索引存储 nil

如果你想调用存储在 game_level_hints.levels["level0"] 中的函数,你只需要执行 game_level_hints.levels["level0"]()

2013-06-17 02:14:59
用户662024
用户662024

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

asd = game_level_hints.levels["level0"]()

现在,asd 包含了我需要的区域字符串。虽然理想情况下,我希望能够像下面这样访问数据:

asd[1][1]

但是,像这样访问它:

asd["scene0"][1]

就可以检索所需的区域数据。我只需要在键上做些处理。

谢谢你们。

2013-06-17 03:09:39