全局变量和局部变量

3

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

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个回答

3

(1) 我有多少个不同的变量?

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

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

创建一个新变量,遮蔽了堆栈上方的那些变量。

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

第二个 local 变量,在 function func() 之后定义。

(4) 如何在if语句块内的函数中设置新值到第一个本地变量?

您必须在定义一个新的遮蔽旧变量的 local 之前设置它。之后,这是不可能的(除了也许使用 debug 库)。

这是您的示例,其中一些值已编辑并添加了一些打印语句,以演示Lua中的作用域规则:

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

2
func 是第五个变量,可能是全局变量。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接