關於Lua唯讀表使用next判空問題

2021-10-24 23:42:58 字數 1239 閱讀 4058

最近在專案中遇到框架上設計的lua唯讀表,在使用next對錶判空時出現一直為nil的情況,後來研究了下唯讀表的生成,特此記錄。

-- lua唯讀表的生成**

xreadonlytable.create =

function

(t)for x, y in

pairs

(t)do

iftype

(x)==

"table"

then

iftype

(y)==

"table"

then

t[xreadonlytable.

create

(x)]

= xreadonlytable.

create

(y)else

t[xreadonlytable.

create

(x)]

= y end

elseif

type

(y)==

"table"

then

t[x]

= xreadonlytable.

create

(y)end

endlocal mt =

return

setmetatable

(, mt)

-- 返回乙個空表

end

-- 測試**

function

test()

local tablea =

local tableb = xreadonlytable.

create

(tablea)

xlog.

debug

(next

(tableb)

) xlog.

debug

(tablea[1]

)end

-- 列印

nil1

**中可以看出,生成唯讀表的時候返回了乙個空表,也就是說tableb是個帶有自己設定好特殊原表的空表,在使用next呼叫tableb的時候,也是呼叫的這個空表,所以返回的是nil。

而按照索引對錶進行訪問的時候,由於訪問空表找不到元素值,就去訪問原表,找到了帶有資料的tablea,返回指定索引資料。

在日後對錶判空還是建議使用next,對於專案內自定義的唯讀表還要多加注意。

Lua設定唯讀表

簡單理解一下 在lua中,當你從乙個table中查詢值的時候,實際上是lua直譯器觸發了 index 而當你賦值時,則是訪問了 newindex 如果 newindex存在就會呼叫這個函式,而不進行賦值。所以重寫這兩個函式就可以達到唯讀表的效果 function table read only t ...

Lua簡單使用,lua工具類編寫,lua表的使用

專案中的工具類編寫,以utils.lua為例 首先建立乙個表。utils utils or 尋找陣列中某個值的下標 utils utils or 尋找陣列中某個值的下標,僅在table中每個值都不一樣時有效 utils.findidxbyvalue function arr,value local ...

lua 使用lua next 遍歷表

進行下面步驟前先將 table 壓入棧頂 intnindex lua gettop plua 取 table 索引值 lua pushnil plua nil 入棧作為初始 key while 0 lua next plua,nindex 現在棧頂是 table lua next 這個函式的工作過程...