lua 递归函数在 false 时获取 true 和 false
2022-2-9 14:57:14
收藏:0
阅读:353
评论:1
不确定发生了什么。我有一个从表中获取数据的递归函数。它发现一个键一开始为 true,之后两次变成了 false,但它本身还是 false。
我想检查 isActive 的布尔值。如果它为 false,则返回 false;如果为 true,则继续脚本。
DUMMY_DATA
local DummyData = {
data = {
['id'] = 34523456,
['question'] = '什么是牛奶?',
['isActive'] = true,
['questionCountdownTimerInSeconds'] = (60),
}
}
RECURSIVE
function FindQuestionInfo(Object)
local Data = {
['id'] = '',
['question'] = '',
['isActive'] = true 或 false,
['questionCountdownTimerInSeconds'] = (0),
}
for index, child in pairs(Object) do
local ChildIsTable = type(child) == 'table'
if not ChildIsTable then
local isActive = index == 'isActive'
local isId = index == 'id'
local isQuestion = index == 'question'
local isQuestionCountDDownTImerInSeconds = index == 'questionCountdownTimerInSeconds'
if isQuestion then
Data['question'] = child
end
if isId then
Data['id'] = child
end
end
if ChildIsTable then
local FoundItem = FindQuestionInfo(child)
if FoundItem then
return FoundItem
end
end
end
return Data
end
原文链接 https://stackoverflow.com/questions/71051745
点赞
评论区的留言会收到邮件通知哦~
推荐文章
- 【上海普陀区】内向猫网络招募【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中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
- 如何创建一个 lua 脚本以针对特定键为 fluentbit 进行限流
- 如何在Lua中将变量从Lua推送到C ++
你的代码没有太多意义。我甚至不确定你想用它实现什么。
我来提几个问题:
['isActive'] = true or false
正如 Nifim 在他的评论中指出的那样
true or false
等于true
。所以你可以简单地这样做['isActive'] = true
你不需要在数字周围加括号,就像
['questionCountdownTimerInSeconds'] = (0)
一样你没有说明你如何使用这段代码。我假设你调用了
FindQuestionInfo(DummyData)
那么我们来运行你的代码。首先你定义
Data
local Data = { ['id'] = '', ['question'] = '', ['isActive'] = true or false, ['questionCountdownTimerInSeconds'] = (0), }
然后你用通用的 for 循环和
pairs()
迭代器遍历了Object
表格。假设Object
是DummyData
,这将在每个循环中给我们DummyData
的键值对。首先你检查
child
(我们的值)是否为一个表。通过提供的代码,我不知道它怎么可能是一个表。如果它不是一个表,你会创建各种布尔值。local isActive = index == 'isActive' local isId = index == 'id' local isQuestion = index == 'question' local isQuestionCountDDownTImerInSeconds = index == 'questionCountdownTimerInSeconds'
然后你有条件地分配值。
if isQuestion then Data['question'] = child end if isId then Data['id'] = child end
所以只有当
index
等于其中一个键时,你才将相同的表字段从 Object 赋值到 Data。整个循环看起来没有意义。如果你想要将一个表中的值分配给另一个表,你只需要将它们分配就可以了。你不需要遍历整个表,直到找到正确的键来分配。
除了你的
isTable
条件似乎总是为 false,你可以用以下方式代替那个 for 循环因为如果它们存在于
Object
中,你只需赋值。然后有这一部分,我无法理解,因为我不知道
child
怎么可能是一个表:if ChildIsTable then local FoundItem = FindQuestionInfo(child) if FoundItem then return FoundItem end end
同时
FindQuestionInfo(child)
总是返回Data
,所以条件if FoundItem then return FoundItem end
是不必要的。
所以除非你的
Object
中有一个你在示例中没有展示的表,我看不出为什么要有这段代码。特别是不该递归。你只将
Object
的一部分复制到新的表Data
中。我也无法理解你的问题描述。
我假设你在这里问的是一个 xy 问题。所以我建议你问一个关于你正在尝试解决的实际问题的新问题,而不是关于如何修复这段代码的问题。