debug.getupvalue
Example
Prints the upvalues of some local functions.
local foo = 5
local bar = "hello"
local test = { "table", true, "variable" }
local function DoSomethingWithFoo()
-- This code won't be run but the function
-- has to reference the variable for
-- it to be counted as an upvalue
foo = foo + 1
end
local function DoSomethingWithFooAndBar()
foo = foo / 2
bar = bar .. " world"
end
local function DoSomethingWithBarAndTest()
test[1] = bar .. "reader!"
end
-- level = stack level to get local variables of
-- returns a table with <page>string</page> keys representing the variable name
local function GetUpvalues( func )
local info = debug.getinfo( func, "uS" )
local variables = {}
-- Upvalues can't be retrieved from C functions
if ( info != nil && info.what == "Lua" ) then
local upvalues = info.nups
for i = 1, upvalues do
local key, value = debug.getupvalue( func, i )
variables[ key ] = value
end
end
return variables
end
print( "DoSomethingWithFoo:" )
PrintTable( GetUpvalues( DoSomethingWithFoo ) )
print( "\nDoSomethingWithFooAndBar:" )
PrintTable( GetUpvalues( DoSomethingWithFooAndBar ) )
print( "\nDoSomethingWithBarAndTest:" )
PrintTable( GetUpvalues( DoSomethingWithBarAndTest ) )
Output:
DoSomethingWithFoo:
foo = 5
DoSomethingWithFooAndBar:
bar = hello
foo = 5
DoSomethingWithBarAndTest:
bar = hello
test:
1 = table
2 = true
3 = variable