[Date Prev][Date Next][Thread Prev][Thread Next]
[Date Index]
[Thread Index]
- Subject: Can't list all the non-local values with debug.getupvalue
- From: "Tim Hunter" <Tim.Hunter@...>
- Date: Mon, 23 Jul 2007 13:31:41 -0400
I'm looking at Listing 23.1 on page 209 in PiL, 2nd edition. I wrote the test program below. The program works the way I expect it to, except that it does not list the values of TESTUP1 and TESTUP2. What am I missing?
---------START-------------------------------
local TESTUP1 = {}
local TESTUP2 = "up"
TESTGLOBAL = "global"
local function put(name, value)
if type(value) == "string" then
print("\t"..name..'="'..value..'"')
else
print("\t"..name..'='..tostring(value))
end
end
local function test(arg)
local a, b = 1, 2
local testvar = "local"
print "Local variables:"
for i = 1, math.huge do
local local_name, local_value = debug.getlocal(1, i)
if not local_name then break end
put(local_name, local_value)
end
print "\nNon-local variables:"
for i = 1, math.huge do
local nonlocal_name, nonlocal_value = debug.getupvalue(test, i)
if not nonlocal_name then break end
put(nonlocal_name, nonlocal_value)
end
print "\nGlobal variables:"
for global_name, global_value in pairs(getfenv(test)) do
put(global_name, global_value)
end
end
test()
---------END---------------------------------
Here's the output:
Local variables:
arg=nil
a=1
b=2
testvar="local"
(for index)=5
(for limit)=inf
(for step)=1
i=8
Non-local variables:
put=function: 0x8a84e20
test=function: 0x8a84d30
Global variables:
string=table: 0x8a80910
xpcall=function: 0x8a80318
package=table: 0x8a80d98
tostring=function: 0x8a80270
print=function: 0x8a80388
os=table: 0x8a82470
unpack=function: 0x8a802e0
require=function: 0x8a81298
getfenv=function: 0x8a7ffb0
setmetatable=function: 0x8a801f8
next=function: 0x8a800d0
assert=function: 0x8a7ff00
tonumber=function: 0x8a80238
io=table: 0x8a81d30
rawequal=function: 0x8a803c0
collectgarbage=function: 0x8a7ff38
arg=table: 0x8a83e98
getmetatable=function: 0x8a80148
module=function: 0x8a80ff0
rawset=function: 0x8a80430
TESTGLOBAL="global"
math=table: 0x8a83038
debug=table: 0x8a83a38
pcall=function: 0x8a80108
table=table: 0x8a80468
newproxy=function: 0x8a80a18
type=function: 0x8a802a8
coroutine=table: 0x8a80a80
_G=table: 0x8a7f450
select=function: 0x8a7f478
gcinfo=function: 0x8a7ff78
pairs=function: 0x8a7fa00
rawget=function: 0x8a803f8
loadstring=function: 0x8a80098
ipairs=function: 0x8a7f9a0
_VERSION="Lua 5.1"
dofile=function: 0x8a7fff0
setfenv=function: 0x8a801c0
load=function: 0x8a80060
error=function: 0x8a80028
loadfile=function: 0x8a80188