2014-05-16 62 views
4

我有以下代碼:怎麼打出來的for循環LUA

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 

當重複設置爲true,我想退出for循環都在一起。現在,即使發現匹配,它也只是遍歷表中的所有值。

我嘗試過使用break語句,但我認爲這是突破了「if」語句。

我正在考慮做一個while while循環,我可以環繞整個for循環,但我仍然需要一種方式來突破for。

謝謝。

+1

你使用'break'的方式是正確的,所以問題不在代碼的這一部分。發佈更多的上下文('temptable'的內容,是在某處定義的'duplicate',等等)。 – catwell

+2

'即使它找到了一個匹配'你是否添加了一些'print'語句來查看命中,即:一個'print'重複發現「'到'if v [」name「] == var2 then'和另一個'print'重複是真實的''到'如果重複然後'並且看它是否曾經擊中過它們?你是否也可以發佈'temptable',以便我們可以看到它包含的內容? – Nope

回答

2

我試過如下:

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 

正如你可以看到它跳過和DOE3。因此錯誤在其他地方:var2或者你的名字不是你想象的(比如名字值是字符串,而var2是數字),或者你沒有任何匹配的鍵。