1. 程式人生 > >lua next 用法

lua next 用法

在專案的指令碼lua中經常有這樣的需求,

1、local a = {}

2、對a進行處理

3、對a是否為空表進行判斷

關於對a是否為空表的判斷,我發現有些程式碼如此做:

if a == {} then

這樣的結果就是a == {}永遠返回false,是一個邏輯錯誤。因為這裡比較的是table a和一個匿名table的記憶體地址。

也有些程式碼如此做:

if table.maxn(a) == 0 then

這樣做也不保險,除非table的key都是數字,而沒有hash部分。

難道真的要遍歷table發現有東西就return false跳出才能斷定它是否為空嗎?這樣寫至少程式碼太難看. 

網上小搜了一下,發現原來官方手冊裡早已經給了答案,那就是靠lua內建的next函式

即如此用:if next(a) == nil then

next其實就是pairs遍歷table時用來取下一個內容的函式.

在專案的module中最好封裝一下,免得module本地也有next函式

於是封裝後判斷的lua table是否為空的函式如下:

function table_is_empty(t)

        return _G.next( t ) == nil

end

------------------------------------------------

自己也用了一下local playerId = next(MsgGuildData.getGuildMemberList())

OK很好用

這樣就不用謝迴圈去遍歷取key表的第一個值了