lua,迭代和调用n = 3层表的所有同名函数
Posted
技术标签:
【中文标题】lua,迭代和调用n = 3层表的所有同名函数【英文标题】:lua, iterating and calling all same-named-functions of n=3 tiers of tables 【发布时间】:2021-08-15 07:43:06 【问题描述】:假设我在 game 中有多个表格,例如 bullets,其中 bullets 有多个表格,如下所示。我将如何遍历并调用 game 中包含的所有更新函数? --下面是一个简化的例子,假设 bullets 中的每个表都有多个条目,而不仅仅是更新。并且最终代码必须在像 game=bullets,coins,whatever 这样的情况下工作,每个条目都与子弹具有相似的性质。
game=
game.bullets=update=function(self) end,..., update=function(self) end,...,...
for obj in all(game) do
for things in all(obj) do
things:update() end end
--我不确定我做错了什么以及是否需要双 for 循环。 --如果子弹没有嵌入到 game 中,那就是:
for obj in all(bullets) do
obj:update()
end
我也试过了:
for obj in all(game.bullets) do
obj:update()
end
*修正:这行得通,但我想解决的问题是,如果我在 game 中有多个像 bullets 这样的表,那么我想解决这个问题。因此,第一次尝试双迭代失败了。因此,我不想像 game 中的项目一样多次重复上述内容,而是想输入一个语句。
【问题讨论】:
您的代码中的all
是什么?还是您不知道pairs
和ipairs
函数是什么,而这就是您要寻找的答案? Programming In Lua: 4.3.5 – Generic for
【参考方案1】:
all()
不是 Lua 中的标准函数。这是您在某处找到的辅助函数吗?
如果没有看到更多示例或说明如何使用它的文档以及预期的返回值,很难说清楚。似乎是一个迭代器,本质上类似于pairs()
。可能是这样的:
for key, value in pairs( game ) do
for obj in all( value ) do
obj :update()
end
end
【讨论】:
正如您正确得出的结论,“所有”只是抓取表格中的每个 obj。所以它相当于 javascrpt: for (var of arr) --for...of 循环。你知道为什么双循环不起作用吗? 它是 pico8 api 的内置部分,我忘了它不是原生的 lua。 wh0am1.dev/pico8-api 哦,是的,所以它只是for key, val in pairs(tbl)
,但他们正在扔掉“钥匙”。通常你会把它写成for _,v in pairs(t)
,然后就可以理解_被忽略了。仍然不能完全确定。 pico-8.fandom.com/wiki/All 如果我不得不猜测,它会挂在某个地方的零或重复条目上。 for key, val in pairs(game) do print( type(key), key, type(val), val ) end
我想这些子弹实际上是相同的。以上是关于lua,迭代和调用n = 3层表的所有同名函数的主要内容,如果未能解决你的问题,请参考以下文章