3
誰かがこの明らかな狂気を説明できますか?Luaのテーブル長演算子はどのように機能しますか?
> t = {1, 2, 3} -- Table length 3. Simple
> = #t
3 -- Yep
> t[3] = nil -- Remove the last element?
> = #t
2 -- Ok it realises it is the last one (since #t = 3) and decrements the length
> t[6] = 6 -- Add a separate element?
> = #t
2 -- Ok... I guess? Although surely it knew #t = 2, and so now #t should be 6?
> t[4] = 4 -- Add another separate element
> = #t
4 -- Errr... what.
> t[5] = 5 -- Append another element
> = #t
6 -- Ok now it remembers element 6? Wtf?
[OK]を、私は何
...再び
> t = {1, 2, 3}
> = #t
3
> t[10] = 10
> = #t
3
> t[4] = 4
> = #t
4
> t[9] = 9
> = #t
4
> t[8] = 8
> = #t
10
を試してみましょう。
ああ、それはそれを説明します。私は#tがnilを返すことができなかった理由や、未定義の場合-1を知りません。 – Timmmm
あなたは、独自の '__len'メタメソッドを実装して、非シーケンステーブルに対して異なる結果を返すことができますが、テーブルが適切なシーケンスであるかどうかを特定する必要があります。 – Adam