4

私はすぐに何かをデバッグする必要があり、次の関数を書きました:

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

これは非常に直感的ではなく、間違いに気付かない自分を馬鹿にしたい..

(ところで、テーブルに再帰参照が含まれている場合、関数がスタックをオーバーフローすることはわかっています。後で修正します)

4

1 に答える 1

10

問題は内側のテーブルです。キーを指定しなかったため、Lua が配列インデックスを指定します。つまり、1. [1]に使用したキーを上書きします"hello??"。したがって、このテーブルの値に適切なキーを与えるか、他の値に整数キーを使用するのをやめる必要があります。

別の言い方をすれば、次の 2 つのテーブルは同一です。

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

{[3] = "third", [2] = "second", "first"} --Note the lack of a key for "first".
于 2011-10-05T21:07:11.120 に答える