我知道这还没有完成,但我无法识别变量。我有 文件x中的变量。 对不起,这是计算机技术我试图让乌龟下来并保持它的位置,这是我的第一次编码。
function getx()
local rx = fs.open("x", "r")
local hx = rx:readLine()
print(hx)
end
function don()
getx()
while hx > 10 do
ddd()
end
end
function ddd()
turtle.down()
end
答案 0 :(得分:1)
您的问题出在scoping。一个函数中定义的变量不能从另一个函数中看到。
调用getx
时,变量hx
仅在其中被记住,有三种方法可以解决此问题。
local hx;
function getx()
local rx = fs.open("x", "r")
hx = rx:readLine()
print(hx)
end
function don()
getx()
while hx > 10 do
ddd()
end
end
function ddd()
turtle.down()
end
此处更改的是hx
已在don
和getx
共享的范围内声明,因此在调用getx
时,hx
已存储,don
仍然可以访问它。
function getx()
local rx = fs.open("x", "r")
hx = rx:readLine()
print(hx)
end
function don()
getx()
while hx > 10 do
ddd()
end
end
function ddd()
turtle.down()
end
如果不将hx
声明为本地,则会在全局范围内使用它,所有函数都可以访问。未明确声明为local的变量将始终使用此范围。
function getx()
local rx = fs.open("x", "r")
local hx = rx:readLine()
print(hx)
return hx
end
function don()
getx()
while hx > 10 do
ddd()
end
end
function ddd()
turtle.down()
end
或更好......
function getx()
local rx = fs.open("x", "r")
local hx = rx:readLine()
print(hx)
return hx
end
function don()
while getx() > 10 do
ddd()
end
end
function ddd()
turtle.down()
end
这是您应该针对此问题使用的解决方案
通过返回function中的值,您可以直接从调用它的位置获取变量。这更清洁,也更快。
每次运行fs.open
时,您的代码实际上都会调用getx
,因为这是ComputerCraft的FS,每次都会从头开始读取文件,并且在崩溃之前导致内存泄漏。为避免这种情况,您只需打开一次文件,就像这样。
local rx = fs.open("x", "r")
function getx()
local hx = rx:readLine()
print(hx)
return hx
end
function don()
while getx() > 10 do
ddd()
end
end
function ddd()
turtle.down()
end
对getx
的每次调用使用相同的文件引用,这意味着readLine()
每次都会读取下一行。
您可以使用的其他优化措施如下所示。
local ddd = turtle.down -- We don't need to define a new function, we can just make 'ddd' a reference to 'turtle.down'
local rx = fs.open("x", "r")
function don()
local n = tonumber(rx:readLine()) -- The 'getx' function is not really needed anymore. 'tonumber' will make sure we're handling a number, not a string.
while n and n > 10 do -- If tonumber doesn't get handed a string that looks like a number, it will return 'nil'. This checks if it's it's nil before seeing if it's greater than 10.
ddd()
end
end
快乐的制作!