web-dev-qa-db-fra.com

Comment terminer le script Lua?

Comment pourrais-je terminer un script Lua? En ce moment, j'ai des problèmes avec exit (), et je ne sais pas pourquoi. (Il s’agit plus d’une question de Minecraft ComputerCraft, car elle utilise les API incluses.) Voici mon code:

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
12
user1610406

Comme l'indique la réponse de prapin, dans Lua, la fonction os.exit([code]) mettra fin à l'exécution du programme Host. Toutefois, il se peut que ce ne soit pas ce que vous recherchiez, car l'appel de os.exit mettra fin non seulement à votre script, mais également aux instances Lua parent en cours d'exécution.

Dans Minecraft ComputerCraft , appeler error() remplira également ce que vous cherchez, mais son utilisation à des fins autres que celle de mettre réellement fin au script après une erreur ne constitue probablement pas une bonne pratique.

Comme dans Lua, tous les fichiers de script sont également considérés comme des fonctions ayant leur propre étendue, le moyen préférable de quitter votre script consiste à utiliser le mot clé return, tout comme vous revenez de fonctions.

Comme ça:

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
17
user1704650

L'instruction break passera à la ligne après la boucle for, while ou repeat dans laquelle elle se trouve.

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

Une bizarrerie de lua: break doit arriver juste avant une end, bien que pas nécessairement la end de la boucle dont vous voulez sortir, comme vous pouvez le voir ici.

De même, si vous souhaitez quitter la boucle sur une condition au début ou à la fin de la boucle, comme ci-dessus, vous pouvez souvent modifier la boucle que vous utilisez pour obtenir un effet similaire. Par exemple, dans cet exemple, nous pourrions mettre la condition dans la boucle while:

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

Notez que j'ai légèrement changé le comportement un peu là-bas, car cette nouvelle boucle s'arrête immédiatement lorsqu'elle atteint la limite du nombre d'éléments, sans continuer jusqu'à ce que detect() redevienne vrai.

4
rakslice

Il n'y a pas de fonction globale nommée exit dans le Lua standard.

Cependant, il existe une fonction os.exit. Dans Lua 5.1, il y a un argument optionnel, le code d'erreur. Sur Lua 5.2, il existe un deuxième paramètre facultatif, indiquant si l’état Lua doit être fermé avant de quitter.

Mais notez que Minecraft ComputerCraft peut fournir une fonction différente de celle du os.exit standard.

3
prapin

Vous pouvez également le terminer manuellement en maintenant enfoncée la touche Ctrl + T quelques secondes dans l'interface tortue/ordinateur.

2
1vannn

Shell.exit () ferme un script lua dans le domaine informatique. Pour plus d'informations, visitez http://computercraft.info/wiki/Shell.exit

0
Knolax

N'utilisez pas while true. Au lieu de cela, utilisez quelque chose comme ceci:

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

Cela fonctionnera pour vous.

0
user6537920

ne pas utiliser un while true

Faites quelque chose comme ça:

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

De plus, vous n'avez pas à appeler turtle.detect() avant de creuser, car turtle.Dig() appellera à nouveau interne

0
Mischa