限制全局变量在全局域声明
setmetatable(_G,{
	__newindex = function(t,n,v)
	local w = debug.getinfo(2,"S").what
	if w ~= "main" and w ~= "C" then
		error("attempt to write to undeclared variable"..n,2)
	end
	rawset(t,n,v)
	end,

	__index = function(_,n)
	error("not exsits "..n,2)
	end
})


a = 100
print(a)


因为全局变量都是保存在一个_G的table中的,所以可以改变它的元方法达到限制新索引的添加

rawset和rawget方法可以跳过元表的元方法。


首页 我的博客
粤ICP备17103704号