I’m completely confused by Lua‘s variable scoping and function argument passing (value or reference).
See the code below:
local a = 9 -- since it's define local, should not have func scope
local t = {4,6} -- since it's define local, should not have func scope
function moda(a)
a = 10 -- creates a global var?
end
function modt(t)
t[1] = 7 -- create a global var?
t[2] = 8
end
moda(a)
modt(t)
print(a) -- print 9 (function does not modify the parent variable)
print(t[1]..t[2]) -- print 78 (some how modt is modifying the parent t var)
As such, this behavior completely confuses me.
-
Does this mean that table variables
are passed to the function by
reference and not value? -
How is the global variable creation
conflicting with the already define
local variable?- Why is
modtable to
modify the table yetmodais not able
to modify the a variable?
- Why is
You guessed right, table variables are passed by reference. Citing Lua 5.1 Reference Manual:
So nil, booleans, numbers and strings are passed by value. This exactly explains the behavior you observe.