Lua - 如果声明了局部变量x,y,z和一个x,y,z,它们是相同的还是不同的?

我在Lua中编程时,对变量的声明有些困惑。由于在一个实例的 x、y、z 上已经声明了“local”,然后在下面声明了另一个实例的 x、y、z,这是否意味着它们是不同的变量,还是它们是相同的变量?

谢谢。

点赞
用户2726734
用户2726734

在你展示的代码中,x,y,z只被声明了一次(作为本地变量),然后被赋予多个新值。其他的x,y,z都在同一个作用域中,与本地x,y,z相同,出现在声明之后。以下是一些例子:

do -- 新范围
  local x,y,z = 'a','b','c' -- 声明为本地变量
  print(x, y, z)   -- 输出 a b c
  do
    x,y,z = 1,2,3   -- 新范围,但仍然引用本地的x,y,z(更高范围)
    print(x, y, z)  -- 输出 1 2 3
  end
  print(x, y, z) -- 输出 1 2 3(修改了原始值)
end -- 结束本地的x, y, z范围(现在它们就是垃圾了)
-- 全局范围,这里没有定义x,y,z
print(x, y, z) -- 输出 nil nil nil

作用域是一个大概念,因此请查看 Scope Tutorial 以获得更深入的讨论。

2015-01-10 23:15:13
用户869951
用户869951

这在PIL的第4.2节中详细讨论。由于你的local x,y,zx,y,z=...在同一个代码“块”中,它们是相同的。

2015-01-12 05:54:16