Comment résilier script Lua?
Comment puis-je résilier un script Lua? Droit maintenant, je vais avoir des problèmes avec exit(), et je ne sais pas pourquoi. (Ce n'est plus un Minecraft ComputerCraft question, car il utilise l'Api inclus). 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
OriginalL'auteur user1610406 | 2012-10-06
Vous devez vous connecter pour publier un commentaire.
Comme prapin réponse des états, en Lua la fonction
os.exit([code])
mettra fin à l'exécution du programme d'accueil. Ceci, cependant, ne peut pas être ce que vous cherchez, parce que l'appel deos.exit
va mettre fin à non seulement votre script, mais aussi le parent Lua instances en cours d'exécution.Dans Minecraft ComputerCraft, appelant
error()
permettra également de réaliser tout ce que vous cherchez, mais l'utiliser à d'autres fins que véritablement terminant le script après une erreur s'est produite est probablement pas une bonne pratique.Parce qu'en Lua tous les fichiers de script sont également considérées comme des fonctions ayant leur propre champ d'application, la meilleure façon de sortir de votre scénario serait d'utiliser les
return
mot-clé, comme vous le retour de fonctions.Comme ceci:
erreur() doit fonctionner correctement dans ce cas, mais j'ai également ajouté à la solution qui est de meilleure pratique.
Merci, bien que cela ne fonctionne pas à partir à l'intérieur d'un appel de fonction dans le programme Lua. (Je vais avoir le même problème.)
dans computercraft "os.exit()" ne pas fermer le parent lua instance. dans CC "os.exit()" est ramené à une fonction qui ne "shutdown" de l'Ordinateur ou de la Tortue.
OriginalL'auteur user1704650
La
break
déclaration de passer à la ligne après lefor
,while
, ourepeat
boucle.Un caprice de lua:
break
doit venir juste avant uneend
, mais pas nécessairement de laend
de la boucle que vous voulez briser, comme vous pouvez le voir ici.Aussi, si vous voulez sortir de 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, on peut mettre l'état dans le
while
boucle:Noter que j'ai subtilement changé le comportement un peu là, comme cette nouvelle boucle va s'arrêter tout de suite lorsqu'il atteint le point limite de nombre, sans poursuivre jusqu'à ce que
detect()
devient encore vrai.OriginalL'auteur rakslice
Il n'y a pas de fonction globale nommé
exit
dans la norme Lua.Cependant, il y a un
os.exit
fonction. En Lua 5.1, il a un argument optionnel, le code d'erreur. Sur Lua 5.2, il est un second paramètre optionnel, dire si le Lua état doit être fermé avant de quitter.Mais notez que Minecraft ComputerCraft peut fournir une fonction différente du standard
os.exit
.os.exit()
fonction n'est pas la sortie des programmes de ComputerCraft. Vous obtiendrez un message d'erreur si vous tentez de l'exécuter. Au lieu de cela, utilisershell.exit()
computercraft.info/wiki/Shell.exitOriginalL'auteur prapin
Vous pouvez également y mettre fin manuellement, maintenez Ctrl + T quelques secondes dans la tortue/ordinateur de l'interface.
OriginalL'auteur 1vannn
shell.exit() ferme un script lua dans l'ordinateur de l'artisanat.
pour plus d'info, allez sur http://computercraft.info/wiki/Shell.exit
OriginalL'auteur Knolax
n'utilisez pas de
while true
Faire quelque chose comme ceci:
Aussi, vous n'avez pas à appeler
turtle.detect()
avant de creuser " causeturtle.dig()
wil appel de nouveau interneOriginalL'auteur Mischa
Ne pas utiliser
while true
. Au lieu d'utiliser quelque chose comme ceci:Il va travailler pour vous.
OriginalL'auteur