如何终止Lua脚本?现在我遇到了exit()问题,我不知道为什么。 (这更多是Minecraft ComputerCraft的问题,因为它使用了包含的API。)这是我的代码:
while true do
if turtle.detect() then
if turtle.getItemCount(16) == 64 then
exit() --here is where I get problems
end
turtle.dig() --digs block in front of it
end
end
答案 0 :(得分:17)
正如prapin的回答所述,在Lua中,函数os.exit([code])
将终止主机程序的执行。但是,这可能不是您要查找的内容,因为调用os.exit
不仅会终止您的脚本,还会终止正在运行的父Lua实例。
在 Minecraft ComputerCraft 中,调用error()
也可以完成您正在寻找的内容,但是将其用于其他目的,而不是在发生错误后真正终止脚本可能不是良好的做法。
因为在Lua中,所有脚本文件也被视为具有自己范围的函数,退出脚本的首选方法是使用return
关键字,就像从函数返回一样。
像这样:
while true do
if turtle.detect() then
if turtle.getItemCount(16) == 64 then
return -- exit from the script and return to the caller
end
turtle.dig() --digs block in front of it
end
end
答案 1 :(得分:4)
break
语句会在for
,while
或repeat
循环后跳到该行。
while true do
if turtle.detect() then
if turtle.getItemCount(16) == 64 then
break
end
turtle.dig() -- digs block in front of it
end
end
-- break skips to here
lua的一个怪癖:break
必须在end
之前,但不一定是你要打破的循环的end
,正如你在这里看到的那样。
此外,如果你想在循环的开始或结束条件下退出循环,如上所述,通常你可以更改你正在使用的循环以获得类似的效果。例如,在这个例子中,我们可以将条件放在while
循环中:
while turtle.getItemCount(16) < 64 do
if turtle.detect() then
turtle.dig()
end
end
请注意,我在那里稍微改变了行为,因为这个新循环会在达到项目数限制时立即停止,而不会继续,直到detect()
再次成为真。
答案 2 :(得分:3)
标准Lua中没有名为exit
的全局函数。
但是,有一个os.exit
功能。在Lua 5.1中,它有一个可选参数,即错误代码。在Lua 5.2上,有第二个可选参数,告诉Lua状态是否应该在退出之前关闭。
但请注意, Minecraft ComputerCraft 可能提供与标准os.exit
不同的功能。
答案 3 :(得分:2)
您也可以通过在海龟/计算机界面中按住 Ctrl + T 几秒钟手动终止它。
答案 4 :(得分:0)
shell.exit()关闭计算机工艺中的lua脚本。 有关详细信息,请转至http://computercraft.info/wiki/Shell.exit
答案 5 :(得分:0)
不要使用while true
做这样的事情:
running = true
while running do
-- dig block
turtle.dig() --digs block in front of it
-- check your condition and set "running" to false
if turtle.getItemCount(16) == 64 then
running = false
end
end
此外,您无需在挖掘之前致电turtle.detect()
,因为turtle.dig()
会再次调用内部
答案 6 :(得分:0)
请勿使用while true
。而不是使用这样的东西:
while turtle.getItemCount(16) < 64 do
if turtle.detect() then
turtle.dig()
end
end
它适用于你。