如何在Lua中跳出for循环

7

我有下面这段代码:

  for k, v in pairs(temptable) do
         if string.match(k,'doe') then 
              if v["name"] == var2 then
                     txterr =  "Invalid name for "..k
                     duplicate = true
             end
             if duplicate then
                     break
             end
         end
    end 

当duplicate设置为true时,我想完全退出for循环。目前,即使它找到匹配项,它仍然会遍历表中的所有值。
我尝试使用break语句,但我认为它正在跳出“if”语句。
我考虑了一个do while循环,可以将其包装在整个for循环周围,但我仍需要一种方法来退出for循环。
谢谢。

1
你使用 break 的方式是正确的,所以问题不在代码的这部分。请提供更多上下文信息(例如 temptable 的内容,是否在其他地方定义了 duplicate 等)。 - catwell
2
即使找到匹配项,你是否添加了一些“打印”语句来查看命中的内容,例如在if v["name"] == var2 then中添加一个print "duplicate found",并在if duplicate then中添加另一个print "duplicate is true",看看它们是否被触发?您能否也发布temptable,以便我们可以查看其包含的内容? - Nope
1个回答

7
我尝试了以下操作:
temptable = {a=1, doe1={name=1}, doe2={name=2}, doe3={name=2}}
var2 = 1
for k, v in pairs(temptable) do
    print('trying', k)
    if string.match(k,'doe') then 
        print('match doe', k, v.name, var2)
        if v["name"] == var2 then
            txterr =  "Invalid name for "..k
            duplicate = true
            print('found at k=', k)
        end
        if duplicate then
            print('breaking')
            break
        end
    end
end 

它能正常工作:

trying  doe2
match doe   doe2    2   1
trying  doe1
match doe   doe1    1   1
found at k= doe1
breaking

从结果来看,它跳过了a和doe3。因此错误可能出现在其他地方:var2或者您的名称不是您想象的那样(例如名称值为字符串而var2是数字),或者您没有匹配的键。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接