2011-10-05 6 views
4

나는 빠르게 기능을 다음과 같은 일을 디버깅 할 수 있었고, 쓴 [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"}}) 

(BTW .. 이것은 내가 거의 실수를 보이지 않는 자신의 바보를 만드는 기분이 너무 직관적이다

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".