lua 递归函数在 false 时获取 true 和 false
2022-2-9 14:57:14
收藏:0
 阅读:639
 评论: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

点赞
 
                评论区的留言会收到邮件通知哦~
            
  
                推荐文章
            
 - 如何将两个不同的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中获取用户配置主目录的跨平台方法
 
你的代码没有太多意义。我甚至不确定你想用它实现什么。
我来提几个问题:
['isActive'] = true or false正如 Nifim 在他的评论中指出的那样
true or false等于true。所以你可以简单地这样做['isActive'] = true你不需要在数字周围加括号,就像
['questionCountdownTimerInSeconds'] = (0)一样你没有说明你如何使用这段代码。我假设你调用了
FindQuestionInfo(DummyData)那么我们来运行你的代码。首先你定义
Datalocal 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 问题。所以我建议你问一个关于你正在尝试解决的实际问题的新问题,而不是关于如何修复这段代码的问题。