函数不会更改变量的值

时间:2019-08-28 15:22:18

标签: lua

我尝试用_G。声明变量,并在函数的末尾,最后一个“结束”之前放置return语句。第一个给我一个错误,另一个没有解决任何问题。

X = 0
Y = 0
Z = 0
BedrockLevel = 0
CurrentLayer = 5
succsess = true


function DigDown(BedrockLevel, CurrentLayer, Z, succsess)
    while BedrockLevel == 0 do
        succsess = turtle.digDown()
        if succsess == false then
            succsess = turtle.down()
            if succsess == false then
                BedrockLevel = Z - 1
            else
                Z = Z - 1
            end
        end
        succsess = turtle.down()
        if succsess == true then
            Z = Z - 1
        end
    end
    while Z < BedrockLevel + CurrentLayer do
        succsess = turtle.up()
        if succsess == true then
            Z = Z + 1
        end
    end
    return BedrockLevel, CurrentLayer, Z, succsess
end


DigDown(BedrockLevel, CurrentLayer, Z, succsess)
print(BedrockLevel, X, Y, Z)

预期结果是:打印功能显示:-10 0 0 5,

但它表示0 0 0 0。

因为这是在代码顶部分配的值,所以我假设即使有return语句,该函数也不会更改它。

1 个答案:

答案 0 :(得分:2)

您的问题与如何将值传递给函数以及如何返回这些值有关。

将值传递给函数并为其赋予与其他全局变量相同的名称时,您将拥有shadow the global variable。这意味着从函数内部几乎无法访问它。

阴影资源:

  

Lua Shadowing example

至于返回,则返回值,但不要将这些值分配给任何变量。您的通话应如下所示:

BedrockLevel, CurrentLayer, Z, succsess = DigDown(BedrockLevel, CurrentLayer, Z, succsess)

或者,您也可以像这样定义DigDown

function DigDown()

这不会遮盖全局变量,因此对BedrockLevel, CurrentLayer, Z, succsess所做的任何更改都将反映在全局变量中。