2013-04-20 27 views
1

在Lua是看來,如果一個數字鍵從表丟失,長度仍繼續計數:Lua中的順序表的長度可能會跳過索引?

> print(#{[1]=1,[2]=2,[4]=4}) 
4 

但這跳過兩個指標停在休息

> print(#{[1]=1,[2]=2,[5]=5}) 
2 

這不只是非常規的構造函數。即使在創建表之後創建了跳過的索引,它仍會計數超過它,只要中斷只有一次。

> x={1,2} 
> print(#x) 
2 
> x[4]=4 
> print(#x) 

這是一個執行錯誤還是這是如何Lua應該工作。這是爲什麼?任何對此文檔的引用都會很有趣。

回答

3

這是如何工作的。表格的長度只在表格是序列時才定義,沒有孔。見http://www.lua.org/manual/5.2/manual.html#3.4.6

+0

謝謝。我明白'#'確實只適用於順序表,而這可能是lua對此行爲的藉口,在非順序表中它如何處理這個'#'似乎很奇怪。 – DoubleMx2 2013-04-20 12:35:10