我能够将功能存储到表中。但现在我不知道如何调用它们。最终表将有大约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
Aaand函数定义:
function on_scene(sceneId)
-- some code
return sceneId
end
function talk(areaId)
-- some code
return areaId
end
修改
我修改了这些函数,因此它们会有更多的上下文。基本上,他们现在返回字符串。 我希望发生的是,在调用函数的最后,我将有一个包含所有这些字符串的表(理想情况下是level表)。
答案 0 :(得分: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
实际上,您可以将其简化为
local a = {myfunc = function(a,b,c) return a,b,c end}
print(a.myfunc(3,4,5)) -- prints 3,4,5
答案很长:你没有描述你的预期结果是什么,但是你所写的内容可能不来做你期望的事情。拿这个片段:
game_level_hints.levels["level0"] = function()
return
{
[on_scene("scene0")] =
{
talk("hint0"),
}
}
end
[问题更新后,此段落不再适用] 您引用 on_scene
和talk
函数,但不“存储”那些表中的函数(因为你在问题中明确引用它们,我认为问题是关于这些函数)。你实际上调用这些函数并存储它们返回的值(它们都返回nil
),所以当执行这个片段时,你会得到“table index is nil”错误使用nil
作为索引存储nil
。
如果您想调用game_level_hints.levels["level0"]
中存储的功能,只需执行game_level_hints.levels["level0"]()
答案 1 :(得分:3)
使用你们的回答和评论,我能够提出以下代码作为解决方案:
asd = game_level_hints.levels["level0"]()
现在,asd
包含我需要的区域字符串。虽然理想情况下,我打算能够访问如下数据:
asd[1][1]
访问它,如:
asd["scene0"][1]
检索区域数据就足够了。我只需要解决问题。
谢谢,伙计们。
答案 2 :(得分:1)
你要做的事情并不是很清楚。在匿名函数中,您将返回一个使用on_scene
的返回值作为键的表。但是你的on_scene
没有返回任何内容。 talk
也是如此。
我将假设您在调用on_scene
表格中的每个级别时要调用talk
和game_level_hints
。
如果是这样,你可以这样做:
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