2015-03-25 59 views

回答

2

除非__len metamethod被定義,#運算符只能在一個序列表上運行。

一個序列是一個表,其正數字鍵集合等於{1..n}對於某些非負整數n

在您的例子:


local t = {"a", "b"} 

t是具有的2的長度的序列。


local t1 = {"a", nil} 

相當於local t1 = {"a"},所以t1是具有的1的長度的序列。


local t1 = {nil, "a"} 

t1不是序列,所以#t1沒有定義。

+0

local t1 = {nil,「a」} t1不是一個序列,它意味着#t1返回錯誤的長度。 – user1723404 2015-03-25 09:05:11

+0

@ user1723404對於不是序列的表,「右」長度沒有達成一致。實際上,對於非序列,Lua可能爲具有相同條目的表返回不同的結果。例如,如果你測試'local t1 = {nil,「a」};打印(#t1)'你可能會得到'2'。但是如果你測試'local t1 = {}; T [1] =零; T [2] = 「A」;打印(#t1)'你可能會得到'0'。 – tehtmi 2015-03-25 10:50:26

+0

@ user1723404'#t1'沒有被定義,意味着它沒有*正確的*值。特別是,你可能會在不同的Lua實現中獲得不同的價值。 – 2015-03-25 11:13:10