lua中的table使用陷阱

2021-07-26 17:03:39 字數 535 閱讀 2788

最近在使用lua開發的過程中,遇到了乙個由於語言機制導致的bug,具體表現就是,我的配置檔案中存了個兩個表項,在用lua載入配置檔案內容之後,返回的表長度竟然是1,然後導致後面的判斷都出錯了,在初次除錯這個bug的時候完全是百思不得其解,把配置檔案看了又看,確實有兩個表項沒錯,但是通過#運算子得到的表長度始終是1,於是我用公司同事寫的乙個列印table模組將返回的table的鍵和值都列印出來看了一下,於是就發現問題了。

原來在lua中,如果我這樣宣告:

local a = {}

a[1] = 1

a[2] = 2

a[4] = 4

print(#a)

那麼輸出的結果就是2,而不是3,這就是比較疑惑的地方了,因為我們明明知道表裡面明明有三個元素,但是輸出的表長度卻是2,這就是因為#這個運算子只能處理下標連續的table,這裡我們宣告的時候沒有下標為3的元素,所以lua在計算長度的時候就不會去看不連續的元素了,這也提醒了我們開發者,對於#操作符一定要慎重使用,否則因為這種問題導致的bug確實挺難調的。

lua之table的使用

本文對從資料結構,儲存和使用三個角度對lua之table的使用進行小結。資料結構 table是lua的一種資料結構,可以用來存放各種型別的元素,例如可以建立陣列和字典,以及二者混合的資料結構,例如 a 陣列 b 字典 c 陣列元素和字典元素混合 儲存 lua的table使用陣列和雜湊表結合的方式,使...

lua使用table問題

今天在開發的時候,自己建立了乙個table。建立 如下 self.skill value table self.skill table for i 1,8 do self.skill table i self.skill value table end這樣每次去改變self.skill table ...

Lua中table的長度

官方文件是這麼描述 的 取長度操作符寫作一元操作 字串的長度是它的位元組數 就是以乙個字元乙個位元組計算的字串長度 table t 的長度被定義成乙個整數下標 n 它滿足 t n 不是nil而 t n 1 為nil 此外,如果 t 1 為nil,n 就可能是零。對於常規的陣列,裡面從 1 到 n 放...