Lua - 在表中执行存储的函数
2013-9-23 20:35:25
收藏:0
阅读:140
评论:3
我成功将函数存储到一个表中,但现在不知道如何调用它们。最终表将有大约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表),其中包含所有这些字符串。 **
点赞
用户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_scene 和 talk 函数,但是你没有在表里“存储”这些函数(因为你在问题中明确引用了它们,我假设这个问题是关于 这些 函数的)。你实际上在调用这些函数并存储它们返回的值(它们都返回 nil),因此当这个片段被执行时,你会得到“表索引为 nil”的错误,因为你试图使用 nil 作为索引存储 nil。
如果你想调用存储在 game_level_hints.levels["level0"] 中的函数,你只需要执行 game_level_hints.levels["level0"]()。
2013-06-17 02:14:59
用户662024
经过你们的回答和评论,我能够得出以下代码作为解决方案:
asd = game_level_hints.levels["level0"]()
现在,asd 包含了我需要的区域字符串。虽然理想情况下,我希望能够像下面这样访问数据:
asd[1][1]
但是,像这样访问它:
asd["scene0"][1]
就可以检索所需的区域数据。我只需要在键上做些处理。
谢谢你们。
2013-06-17 03:09:39
评论区的留言会收到邮件通知哦~
推荐文章
- 如何将两个不同的lua文件合成一个 东西有点长 大佬请耐心看完 我是小白研究几天了都没搞定
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
这并不是很清楚你试图做什么。在匿名函数中,你正在返回一个使用
on_scene的返回值作为键的表。但是你的on_scene没有返回任何内容。talk也是一样。我假设你想在调用
game_level_hints表中的每个级别时调用on_scene和talk。如果是这样,你可以这样做:
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