Lua學習筆記之利用元表來製作一個只讀的表

目錄

1、博客介紹

2、內容

3、推送

4、結語


1、博客介紹

本篇博客作爲Lua的學習筆記,記錄一下利用元表和元方法來製作一個只讀的表,本篇博客需要對元表相關知識有一定的瞭解,若是對元表不瞭解可以先行跳轉到博主前一篇關於元表的博文,文章底部設有轉送門。


2、內容

首先我們瞭解,Lua中一個空表,我們是可以對其進行幾乎任意的操作,我們可以從中根據對應鍵來獲取相應的值,也可以根據對應的鍵來附加相應的值,如下所示:

local testTable = {}

testTable.width = 10

print(testTable.name)     --------nil

我們如何去創建一個只讀的表呢,通過元表,瞭解元表後我們可以知道,我們訪問帶有元表的表時,首先是去訪問該元表的元方法 __index,當我們對帶有元表的表進行賦值的時候,我們會首先訪問該元表的元方法 __newindex,那麼結果顯而易見了,我們可以對錶設置一個代理的空表,該空表設置元表,元表__index返回被代理的表,__newindex則拋出異常,如此便可以實現只讀的表,以下例子:

----------------------------------------首先我們準備一個需要被設置爲只讀的表
local testTable = {}
testTable.width = 10
testTable.print = function()
	print("Sun")
end

----------------------------------------該方法將表設置爲只讀
function setOnlyRead(t)
	--代理的空表
	local proxy = {}
	--空表的元表
	local meta = {
		--被訪問的時候就返回被代理的表
		__index = t,
		--賦值的時候直接拋出異常
		__newindex = function(t,k,v)
			error("this table is a read-only table")
		end
	}
	--設置元表
	setmetatable(proxy,meta)
	--將代理返回
	return proxy
end

local readOnlyTable = setOnlyRead(testTable)

print(readOnlyTable.width)				------10
readOnlyTable.print()              		        ------Sun
readOnlyTable.hhh = 100					------報錯


3、推送

Github:https://github.com/KingSun5

元表:https://blog.csdn.net/Mr_Sun88/article/details/105205942


4、結語


        原理很簡單,寫法也很簡單,若是覺得博主的文章寫的不錯,不妨關注一下博主,點贊一下博文,另博主能力有限,若文中有出現什麼錯誤的地方,歡迎各位評論指摘。

       QQ交流羣:806091680(Chinar)

       該羣爲CSDN博主Chinar所創,推薦一下!我也在羣裏!
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章