--[[
-- 全局变量保存在 _G 中
-- 遍历当前的全局变量
for n in pairs (_G) do
print(n)
end
-- 新增全局变量
huangMP = "huangMP"
for n in pairs (_G) do
print(n)
end
--]]
--[[
-- 具有动态名字的全局变量
-- value = loadstring( "return " .. varname )
-- value = _G(varname)
-- _G(varname) = value
function getfield(f)
local v = _G -- 从全局变量的table开始
for w in string.gmatch( f , "[%w_]+") do
v = v[w]
end
return v
end
-- a.b.c.d = v --> local temp = a.b.c; temp.d = v
function setfield( f, v )
local t = _G -- 从全局变量的table开始
for w,d in string.gmatch( f , "([%w_]+)(%.?)" ) do
if d == "." then -- 是最后一个字段吗
t[w] = t[w] or {} -- 如果不存在就创建 table
t = t[w] -- 获取该table
else
t[w] = v
end
end
end
setfield("t.x.y" , 10)
print(t.x.y)
--]]
setmetatable( _G , {
__newindex = function(t, n , v )
local w = debug.getinfo(2,"S").what
if w~="main" and w~="C" then -- 是否是主程序 或者 是否是c程序
error("attempt to write to undeclared vaiable " .. n , 2 )
end
rawset(t,n,v)
end ,
__index = function( _ , n )
error("attemp to read undeclared variable " .. n , 2 )
end
})
-- prinf(a) -- attemp to read undeclared variable prinf
a = "HK"
print(a)
print( _G["a"])
-- 声明全局变量 1
function declare( name , initval )
rawset( _G , name , intival or false )
end
-- 声明全局变量 2
a = 10 -- 这种方法要在主程序中才有效
-- debug.getinfo(2,"S").what 可查看当前是否是主程序块
function f(a)
-- b = a
return a
end
s = f("OK")
print(s)
32. Lua 全局环境
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 持续集成简介 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味...
- 抽象类与接口的比较 (Java)SSM+MySQL实现旅游管理系统【含源码】https://blog.csdn.n...
- 用conda安装没有找到包,于是用pip,但是pip安装到了全局 问题排查: 1.虚拟环境已激活; 2.用cond...