14

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
4

7 に答える 7

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
于 2012-10-06T14:38:45.667 に答える
4

ステートメントは、 、、またはループの後breakの行にスキップします。forwhilerepeat

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 になるまで続行しないため、動作を少し変更したことに注意してください。

于 2013-10-16T06:59:42.427 に答える
3

exit標準の Lua にはグローバル関数という名前はありません。

ただし、os.exit機能はあります。Lua 5.1 では、エラー コードというオプションの引数が 1 つあります。Lua 5.2 では、終了する前に Lua の状態を閉じる必要があるかどうかを示す、2 番目のオプションのパラメーターがあります。

ただし、Minecraft ComputerCraftは標準の機能とは異なる機能を提供する場合があることに注意してくださいos.exit

于 2012-10-06T14:19:06.953 に答える
0

使用しないでくださいwhile true。代わりに、次のようなものを使用します。

while turtle.getItemCount(16) < 64 do
  if turtle.detect() then
    turtle.dig()
  end
end

それはあなたのために働くでしょう。

于 2016-11-19T08:35:33.450 に答える
-1

shell.exit() はコンピューター クラフトで lua スクリプトを閉じます。詳細については、http://computercraft.info/wiki/Shell.exitを参照してください。

于 2014-04-10T00:09:09.950 に答える