函数不改变变量的值

我试过用 _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)

期望的输出为: print 函数显示: -10 0 0 5,

但实际上是 0 0 0 0。

因为这是代码顶部分配的值,我认为函数并没有改变它,尽管有 return 语句。

点赞
用户7396148
用户7396148

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

当你给函数传递一个值并给它一个与某个全局变量相同的名称时,你就会遮蔽了全局变量。这意味着它在函数内部大多数情况下都是不可访问的。

关于遮蔽的资源:

Lua遮蔽示例

至于你的返回值,你返回了这些值,但没有将这些值分配给任何变量。你的调用应该像这样:

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

或者你可以这样定义DigDown

function DigDown()

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

2019-08-28 15:41:57