Luaスクリプトを終了するにはどうすればよいですか?現在、exit()で問題が発生していますが、その理由はわかりません。 (これは、含まれているAPIを使用するため、Minecraft ComputerCraftの質問になります。)私のコードは次のとおりです。
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
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
_
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()
が再びtrueになるまで続行せずに、アイテム数の制限に達するとすぐに停止するため、動作を少し変更したことに注意してください。
標準のLuaにはexit
という名前のグローバル関数はありません。
ただし、os.exit
関数があります。 Lua 5.1では、オプションの引数が1つ、エラーコードがあります。 Lua 5.2には、終了する前にLua状態を閉じる必要があるかどうかを示す2番目のオプションのパラメーターがあります。
ただし、Minecraft ComputerCraftは、標準のos.exit
とは異なる機能を提供する場合があることに注意してください。
押し続けることで手動で終了することもできます Ctrl + T タートル/コンピューターのインターフェースで数秒。
_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()
が内部で再度呼び出すためです。
Shell.exit()は、コンピュータークラフトのluaスクリプトを閉じます。詳細については、 http://computercraft.info/wiki/Shell.exit にアクセスしてください。
while true
は使用しないでください。代わりに、次のようなものを使用します。
while turtle.getItemCount(16) < 64 do
if turtle.detect() then
turtle.Dig()
end
end
それはあなたのために働くでしょう。