2012-10-06 22 views
12

私はどのようにしてLuaスクリプトを終了できますか?今はexit()で問題が発生していますが、理由はわかりません。 (。それはAPIが含ま使用していますので、これは、MinecraftのComputerCraft質問の詳細です)ここでは私のコードです:標準のLuaでexitという名前のグローバル関数はLuaスクリプトを終了するには?

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 

答えて

17

prapinの回答では、Luaでは関数os.exit([code])がホストプログラムの実行を終了します。しかし、os.exitを呼び出すと、あなたのスクリプトだけでなく、実行中の親のLuaインスタンスも終了するので、これはあなたが探しているものではないかもしれません。 MinecraftのComputerCraft

error()を呼び出すことも、あなたが探しているものを達成しますが、エラーが発生した後、純粋スクリプトを終了する以外の目的のためにそれを使用することはおそらく良い方法ではありません。

すべてのスクリプトファイルも独自のスコープを持つ関数とみなされるため、スクリプトを終了するには、関数から戻るように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 
+0

ああ、ありがとう!多くの助けられました – user1610406

+0

エラー()はこの場合うまく動作するはずですが、私はまた、より良い方法である解決策を追加しました。 – user1704650

+1

これはLuaプログラムの関数呼び出しの中では機能しませんが、ありがとうございます。 (私は同じ問題を抱えています) –

3

はありません。

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

ただし、Minecraft ComputerCraftは、標準os.exitとは異なる機能を提供する場合があります。

+0

'os.exit()'関数は、ComputerCraftのプログラムを終了しません。実行しようとするとエラーが発生します。代わりに、 'shell.exit()'を使用してください。 http://computercraft.info/wiki/シェル。 –

1

また亀/コンピュータのインターフェイスに数秒をはCtrl + Tを押して手動で終了することができます。

4

break文はそれがでますforwhile、または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()が再び真になるまで続行せずに。

0

shell.exit()は、コンピュータクラフトのluaスクリプトを閉じます。さらに情報のため は、このような何かをwhile true

を使用していないhttp://computercraft.info/wiki/Shell.exit

+0

現在実行中のスクリプトは終了しません。だから、これは質問に答えません。 – user7103188

0

に行く:また

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()はそれを呼び出すウィル起こします再度内部

0

while trueを使用しないでください。代わりに、このようなものを使用してください:

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

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

関連する問題