首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > perl python >

lua元表和全局变量有关问题

2013-11-02 
lua元表和全局变量问题今天学习Lua中文教程中,里面说程序很大时,一个简单的拼写错误可能引起bug 并且很难

lua元表和全局变量问题
今天学习Lua中文教程中,里面说程序很大时,一个简单的拼写错误可能引起bug 并且很难发现,又因为Lua 所有的全局变量都保存在一个普通的表中,所以可以使用metatables来改变访问全局变量的行为。 
如下是使用元表对新增全局变量和全局变量的使用进行管理。
setmetatable(_G, {
__newindex = function  (_, n)
error("attempt to write to undeclared variable " ..n, 2)
end,

__index = function  (_, n)
error("attempt to read undeclared variable " ..n, 2)
end,
})
这样一来,任何企图访问一个不存在的全局变量的操作都会引起错误

function declare(name, initval)
rawset(_G, name, initval or false )
end
又通来declare来声明变量。
但是这里运行就出了问题,就是_G也保存方法名,这样declare就创建不成功。
attempt to write to undeclared variable declare
这个问题怎么解?或在实际项目中有什么其它方法来解决全局变量多而混乱的现象? lua元表和全局变量问题 Lua
[解决办法]
理论上上述做法是可以的,因为rawset不会调用metamethod,
楼主最好把代码贴全

一般实际项目应用不会去限制读而只限制写,因为nil在lua中很有用。

稍微复杂的保护机制楼主可以看这里:
http://blog.csdn.net/axx1611/article/details/8121740

热点排行