我尝试用_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语句,该函数也不会更改它。
答案 0 :(得分:2)
您的问题与如何将值传递给函数以及如何返回这些值有关。
将值传递给函数并为其赋予与其他全局变量相同的名称时,您将拥有shadow the global variable。这意味着从函数内部几乎无法访问它。
阴影资源:
至于返回,则返回值,但不要将这些值分配给任何变量。您的通话应如下所示:
BedrockLevel, CurrentLayer, Z, succsess = DigDown(BedrockLevel, CurrentLayer, Z, succsess)
或者,您也可以像这样定义DigDown
:
function DigDown()
这不会遮盖全局变量,因此对BedrockLevel, CurrentLayer, Z, succsess
所做的任何更改都将反映在全局变量中。