--[[---------------------------------------------------
Programmer : EOF
File : accessing_non-local_varibles.lua
Date : 2015.06.29
E-mail : jasonleaster@gmail.com
Chapter 23 of << Programming in Lua >>
Demonstration for "Accessing non-local varibles"
------------------------------------------------------]]
function getvarvalue(name, level)
local value
local found = false
level = (level or 1) + 1
print (level)
-- try local variables
for i = 1, math.huge do
local n, v = debug.getlocal(level, i)
if not n then break end
if n == name then
value = v
found = true
end
end
if found then return value end
-- try non-local varibles
local func = debug.getinfo(level, "f").func
for i = 1 , math.huge do
local n , v = debug.getupvalue(func, i)
if not n then break end
if n == name then break return v end
end
-- if name == "_ENV" then
-- print("Can not find varible @_ENV")
-- return
-- end
-- not found; get value from the environment
local env = getvarvalue("_ENV", level)
if not env then return end
return env[name]
end
hello = 1
print(getvarvalue(hello, 0))
我尝试查看全局变量hello的信息,但是,这里会陷入无限的递归。。。。
getvarvalue是照着《Programming In Lua》第三版写的。
刚开始的时候我照着第二版的《Programming In Lua》写,但是发现有问题。新版本的Lua不再提供setfenv函数,就去找第三版的书看,现在发现第三版的也有问题。
如果有高手路过,对这个问题有了解,希望能够交流指教