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

来源:互联网 发布:一般都用啥下载软件 编辑:程序博客网 时间:2024/06/02 14:35
--[[---------------------------------------------------Programmer  :   EOFFile        :   accessing_non-local_varibles.luaDate        :   2015.06.29E-mail      :   jasonleaster@gmail.comChapter 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]endhello  = 1print(getvarvalue(hello, 0))

我尝试查看全局变量hello的信息,但是,这里会陷入无限的递归。。。。

getvarvalue是照着《Programming In Lua》第三版写的。
刚开始的时候我照着第二版的《Programming In Lua》写,但是发现有问题。新版本的Lua不再提供setfenv函数,就去找第三版的书看,现在发现第三版的也有问题。

如果有高手路过,对这个问题有了解,希望能够交流指教

0 0