全球和当地人

时间:2015-03-28 03:09:33

标签: lua scope global-variables local-variables

如果这是一个非常基本的问题,我很抱歉,但我是初学者,并且在区分本地变量和全局变量方面存在问题。例如:

variable=0
local variable=0
function func()
    local variable=0
    variable=0
    if variable==0 then
        local variable=1
    end
end
  • 我有多少个单独的变量?
  • 在if语句块中重新分配了哪个变量?或者它是一个与所有其他变量分开的新变量?
  • 哪个变量是if语句测试?
  • 如何在if语句块中的函数中为第一个局部变量设置一个新值?那不仅仅是实例化一个仅限于if语句块的新变量吗?

非常感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

  

(1)我有多少个单独的变量?

四:三个本地人和一个全球人。虽然“全局变量”只是函数环境中的一个字段(_G)。

  

(2)在if语句块中重新分配了哪个变量?或者它是一个与所有其他变量分开的新变量?

创建一个新变量,将堆栈中的那些变为阴影。

  

(3)哪个变量是if语句测试?

第二个local,在function func()

之后定义
  

(4)如何在if语句块中的函数中为第一个局部变量设置一个新值?

在定义影响旧版local的新variable=123 print(variable) -- prints 123 local variable=0 print(variable) -- prints 0 function func() local variable=1 variable=1 print(variable) -- prints 1 if variable==1 then print(variable) -- prints 1 local variable=5 print(variable) -- prints 5 end print(variable) -- prints 1 end func() print(variable) -- prints 0 print(_G.variable) -- prints 123 之前,您必须先设置它。在那之后,这是不可能的(除了可能使用调试库)。

以下是您的示例,其中包含一些值编辑和一些打印语句,以演示Lua中的作用域规则:

{{1}}