Revision Difference
debug.getlocal#527975
<function name="getlocal" parent="debug" type="libraryfunc">
<description>⤶
Gets the name and value of a local variable indexed from the level⤶
<warning>When a function has a tailcall return, you cannot access the locals of this function</warning>⤶
<description>Gets the name and value of a local variable indexed from the level.⤶
<warning>When a function has a tailcall return, you cannot access the locals of this function.</warning>⤶
</description>
<realm>Shared and Menu</realm>
<args>
<arg name="thread" type="thread" default="Current thread">The thread</arg>
<arg name="level" type="number">The level above the thread.
0 = the function that was called (most always this function)'s arguments
⤶
1 = the thread that had called this function.
⤶
2 = the thread that had called the function that started the thread that called this function.
* 0 = the function that was called (most always this function)'s arguments
* 1 = the thread that had called this function.
* 2 = the thread that had called the function that started the thread that called this function.
A function defined in Lua can also be passed as the level. The index will specify the parameter's name to be returned (a parameter will have a value of nil).</arg>
<arg name="index" type="number">The variable's index you want to get.
⤶
1 = the first local defined in the thread
⤶
2 = the second local defined in the thread
⤶
etc...</arg>⤶
* 1 = the first local defined in the thread
* 2 = the second local defined in the thread
* etc...⤶
</arg>⤶
</args>
<rets>
<ret name="" type="string">The name of the variable⤶
Sometimes this will be "(*temporary)" if the local variable had no name.
<ret name="" type="string">The name of the variable.⤶
Sometimes this will be `(*temporary)` if the local variable had no name.
<note>Variables with names starting with **(** are **internal variables**.</note></ret>
<ret name="" type="any">The value of the local variable.</ret>
</rets>
</function>
<example>
<description>Gets all the local variables of the current thread and stores them in a table.</description>
<code>
local name, value;⤶
local name, value⤶
local NIL = {} -- to represent nil variables
local locals = {}
local i = 1
while( true ) do
⤶
while( true ) do
name, value = debug.getlocal( 1, i )
if ( name == nil ) then break end
locals[ name ] = value == nil and NIL or value
i = i + 1
end
for k,v in pairs( locals ) do
for k, v in pairs( locals ) do
print( k, v )
end
</code>
<output>
⤶
```⤶
```⤶
locals table: 0x274a8dc0
value table: 0x274a8d98
NIL table: 0x274a8d98
name table: 0x274a8d98
i 5
```
⤶
</output>
⤶
</example>⤶
⤶
⤶
<example>⤶
<description>Prints the parameter names for <page>hook.Add</page></description>⤶
</output>
</example>⤶
⤶
<example>⤶
<description>Prints the parameter names for <page>hook.Add</page>.</description>⤶
<code>
local print = print
local getlocal = debug.getlocal
local function PrintFunctionParameters(func)
local function PrintFunctionParameters( func )
local k = 2
local param = getlocal(func, 1)
local param = getlocal( func, 1 )
while param ~= nil do
print(param)
param = getlocal(func, k)
print( param )
param = getlocal( func, k )
k = k + 1
end
end
PrintFunctionParameters(hook.Add)
PrintFunctionParameters( hook.Add )
</code>
<output>
⤶
```⤶
```⤶
event_name
name
func
```
⤶
</output>
⤶
</example> </output>
</example>