Lua設定唯讀表

2021-09-22 12:19:19 字數 424 閱讀 2344

簡單理解一下:在lua中,當你從乙個table中查詢值的時候,實際上是lua直譯器觸發了_index ,而當你賦值時,則是訪問了_newindex ,如果_newindex存在就會呼叫這個函式,而不進行賦值。

所以重寫這兩個函式就可以達到唯讀表的效果:

function table_read_only(t)

local temp= t or {} 

local mt =

setmetatable(temp, mt) 

return temp

end用法:

local t_a =

local t_b = table_read_only( t_a) --t_b為唯讀

t_b[5] = 1 --對錶進行更新,會報錯:attempt to update a read-only table!

lua中設定唯讀table

c 裡有const用來定義常量,保護引數或函式意外地修改,提高程式的健壯性。在lua裡雖然沒有沒有類似的關鍵字,我們可以用表來模擬實現其唯讀的功能,來保護我們的資料被意義地修改。lua 裡有乙個 index metamethod,當我們訪問乙個表不存在的域時,會觸發lua直譯器去查詢 index m...

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

最近在專案中遇到框架上設計的lua唯讀表,在使用next對錶判空時出現一直為nil的情況,後來研究了下唯讀表的生成,特此記錄。lua唯讀表的生成 xreadonlytable.create function t for x,y in pairs t do iftype x table then if...

select設定唯讀

根據需求,需要根據後台傳來的引數,動態設定select標籤是否可以選擇,因此,當判斷某個select應當設為唯讀時,使用 id attr disabled disabled 來設定。但是,這樣設定有乙個問題,標籤被設定為唯讀之後,submit時將跳過這一標籤,後台會取不到它的值。要想設定唯讀的同時,...