Lua的本地变量实际上是如何工作的?

我知道这是一个非常基本的问题,但是我对 Lua 中的 local 变量及其作用域感到非常困惑。例如,如果我写了 local x=12,那么它意味着变量 x 是一个局部变量,它的值是 12。但是,如果我写了 local x,然后在下一行写了 x=12,这是不是意味着和前一种情况一样,或者 x=12 被视为全局变量?

点赞
用户3642914
用户3642914

你在每个作用域中只需要使用一次 local 关键字,因此在你的示例中第二次访问 x 将会使用本地的 x。如果你需要访问全局的 x,你可以使用 __G.x

2015-05-28 06:20:43
用户501459
用户501459

你可以认为它是两个完全独立的事情:

  1. local x 在本地作用域中创建一个“插槽”来保存值,即变量。这个变量的名字是 x。从那时起,直到退出该作用域,对 x 的任何引用都将引用该本地 x

  2. x = 12 将值放入变量 x 中。如果之前已经创建了一个名为 x 的本地插槽,那么它就会在那里。如果在作用域中没有本地 x,它将进入全局作用域。

local x = 12 就是将这两个事情结合起来的简写,同时创建一个本地变量并赋予它一个值。

所以是的,你的两种情况实际上是等效的。

local x
x = 12

local x = 12

做同样的事情。

2015-05-28 06:35:50