Lua for循环遍历table校验登录 失败提示重复输出如何解决
Lua登录校验脚本重复输出失败提示问题修复
问题现象
现有登录校验脚本核心逻辑是调用内置函数takeinternalogin获取用户登录信息,校验该信息是否存在于预设的tablelogin表中。当前脚本基础功能可运行,但存在异常:当用户登录信息不在表内时,失败提示failed login not found会重复输出4次,输出次数与表遍历次数完全一致,需要调整实现让失败提示仅输出1次。
原始问题代码如下:
tablelogin = {0 = "test1",1 = "test2",2 = "test3",3 = "test4"} for pp=0,#table do if takeinternalogin == (tablelogin[pp]) then LogPrint("Login found") else LogPrint("failed login not found") end end
问题原因
当前逻辑把成功/失败的判断放在了循环内部:
- 每遍历到一个表元素,就会做一次匹配判断,只要当前元素和登录信息不匹配,就会立刻触发else分支打印失败提示,每一个不匹配的元素都会触发一次日志打印,自然会出现重复输出
- 就算遍历过程中匹配到了正确的登录信息,循环也不会终止,后续遍历到不匹配的元素时依然会打印失败提示,逻辑本身存在漏洞
- 存在额外笔误:循环条件中写的
#table既没有对应定义的变量,也不是目标遍历表tablelogin,且Lua的#长度运算符默认计算从索引1开始的连续数组长度,当前表从索引0开始存值,直接用#取长度会出现索引遍历不全的问题
修改方案
调整判断逻辑,将结果输出移到循环结束后统一执行:
- 初始化一个布尔类型的匹配标记,默认值为
false,代表未找到匹配的登录信息 - 遍历登录表过程中,只要匹配到和当前用户登录信息一致的项,就把标记设为
true,同时用break直接跳出循环,减少无意义的遍历消耗 - 等整个遍历流程完全结束后,再根据标记变量的值统一输出结果:标记为
true打印登录成功提示,标记为false仅打印一次失败提示
修改后的可运行代码:
tablelogin = {[0] = "test1", [1] = "test2", [2] = "test3", [3] = "test4"} -- 提前获取一次登录信息,避免循环内重复调用内置函数 local currentUserLogin = takeinternalogin local isLoginMatched = false -- 适配从0开始的表索引,遍历全部4个元素 for pp = 0, 3 do if currentUserLogin == tablelogin[pp] then isLoginMatched = true break -- 找到匹配项直接终止循环 end end -- 遍历完成后统一输出结果 if isLoginMatched then LogPrint("Login found") else LogPrint("failed login not found") end
如果后续
tablelogin的元素数量会动态调整,不想硬编码遍历上限3,可以提前遍历表统计实际元素总数,替换硬编码值即可。
内容的提问来源于stack exchange,提问作者larissabr
相关产品推荐
相关产品推荐

