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表).
简短回答:要调用存储在数组中的函数(引用),您只需添加(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_scene和talk功能,但您没有在表格中"存储"这些功能(因为您在问题中明确引用它们,我认为问题是关于这些功能) .实际上,你调用这些函数和存储他们返回(他们都返回的值nil),所以执行这个片段时,你会得到"表索引是零"的错误,你正在尝试存储nil使用nil的指标.
如果你想调用你存储的函数game_level_hints.levels["level0"],你就可以了game_level_hints.levels["level0"]()
根据你们的回答和评论,我能够提出以下代码作为解决方案:
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)
检索区域数据就足够了。我只需要解决按键问题。
多谢你们。