我完全困惑Lua的变量作用域和函数参数传递(值或引用)。函数/变量作用域(传递值或引用?)
请参见下面的代码:
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)
因此,这种行为完全混淆了我。
这是否意味着通过 引用传递给函数 ,而不是看重的表变量?
如何创建全局变量 与已定义的 局部变量冲突?
- 为什么
modt
能够 修改表尚未moda
不能 修改一个变量?
- 为什么
这与通过引用略有不同。 (看我的答案)。特别是'function(x)x = {} end'的行为是不同的。 – 2011-12-02 08:32:03
所有东西都是按值传递的,通过某些类型(表,函数,线程和(完整)用户数据值)是引用。这些引用是按值传递的。 – Ethan 2015-10-30 01:10:16