簡單理解一下:在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時將跳過這一標籤,後台會取不到它的值。要想設定唯讀的同時,...