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
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
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.
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.
Vous pouvez également le terminer manuellement en maintenant enfoncée la touche Ctrl + T quelques secondes dans l'interface tortue/ordinateur.
Shell.exit () ferme un script lua dans le domaine informatique. Pour plus d'informations, visitez http://computercraft.info/wiki/Shell.exit
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.
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