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所创,推荐一下!我也在群里!
 

猜你喜欢

转载自blog.csdn.net/Mr_Sun88/article/details/105648580
今日推荐