您的位置:首页 > 编程语言 > Lua

《Programming In Lua》书上一个有问题的代码

2015-06-30 12:23 435 查看
--[[---------------------------------------------------
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函数,就去找第三版的书看,现在发现第三版的也有问题。

如果有高手路过,对这个问题有了解,希望能够交流指教
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: