2011-10-05 29 views
4

我很快就不得不調試的東西,並寫了以下功能:現在的Lua: '對' 不遍歷[1]

function dumpTable(t) 
    for i,v in pairs(t) do 
     if type(v) == "table" then 
      dumpTable(v) 
     else 
      print(i..":", v) 
     end 
    end 
end 

,出於某種原因

dumpTable({[1]="hello??", [2]="two", {[132]="something", [3.2]="else"}}) 

輸出

132: something 
3.2: else 
2: two 

注意第一個字符串是如何丟失的?但是,如果我改變它的鍵..

dumpTable({["one"]="hello??", [2]="two", {[132]="something", [3.2]="else"}}) 

它輸出

132: something 
3.2: else 
one: hello?? 
2: two 

這是如此直觀,我幾乎覺得自己讓自己的白癡沒有看到錯誤..

(順便說一句。我知道如果表中包含遞歸引用,我的函數將溢出堆棧,將在稍後修復)

在此先感謝您浪費時間:D

回答

10

問題是內部表。你沒有給它一個關鍵,這意味着Lua會給它一個數組索引。即,1。這將覆蓋用於"hello??"[1]密鑰。所以你需要給這個表值一個適當的鍵,或者你需要停止使用整數鍵的其他人。

或者,換一種說法,下面兩個表是相同的:

{"first", "second", "third"} 

{[3] = "third", [2] = "second", "first"} --Note the lack of a key for "first".