español - aprender lua
¿Cómo terminar el script de Lua? (7)
Como dice la respuesta de prapin, en Lua la función os.exit([code])
terminará la ejecución del programa host. Esto, sin embargo, puede no ser lo que estás buscando, porque al llamar a os.exit
se terminará no solo tu script, sino también las instancias Lua padre que se están ejecutando.
En Minecraft ComputerCraft , el error()
llamada error()
también logrará lo que está buscando, pero usarlo para otros propósitos que no sea terminar el script genuinamente después de que se haya producido un error probablemente no sea una buena práctica.
Debido a que en Lua todos los archivos de script también se consideran funciones que tienen su propio alcance, la forma preferida de salir de su script sería usar la palabra clave return
, tal como lo hace al regresar de las funciones.
Me gusta esto:
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
¿Cómo terminaría una secuencia de comandos de Lua? En este momento estoy teniendo problemas con exit (), y no sé por qué. (Esta es más una pregunta de Minecraft ComputerCraft, ya que usa las API incluidas). Aquí está mi código:
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
No hay una función global llamada exit
en Lua estándar.
Sin embargo, hay una función os.exit
. En Lua 5.1, tiene un argumento opcional, el código de error. En Lua 5.2, hay un segundo parámetro opcional, que indica si el estado de Lua debe cerrarse antes de salir.
Pero tenga en cuenta que Minecraft ComputerCraft puede proporcionar una función diferente a la de os.exit
.
shell.exit () cierra una secuencia de comandos lua en el arte de la computadora. para obtener más información, vaya a http://computercraft.info/wiki/Shell.exit
También puede finalizarlo manualmente manteniendo presionadas las teclas Ctrl + T unos segundos en la interfaz de la tortuga / computadora.
no use un while true
Haz algo como esto:
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
Tampoco tienes que llamar a turtle.detect()
antes de cavar porque turtle.dig()
lo volverá a llamar interno
No lo uses while true
. En lugar de usar algo como esto:
while turtle.getItemCount(16) < 64 do
if turtle.detect() then
turtle.dig()
end
end
Funcionará para ti.
La declaración de salto se saltará a la línea después for
while
esté el bucle for
, while
o 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
Una peculiaridad de lua: break
tiene que llegar justo antes de end
, aunque no necesariamente al end
del ciclo del que quieres salir, como puedes ver aquí.
Además, si desea salir del bucle en una condición al inicio o al final del bucle, como se indicó anteriormente, a menudo puede cambiar el bucle que está utilizando para obtener un efecto similar. Por ejemplo, en este ejemplo podríamos poner la condición en el ciclo while:
while turtle.getItemCount(16) < 64 do
if turtle.detect() then
turtle.dig()
end
end
Tenga en cuenta que modifiqué sutilmente el comportamiento un poco allí, ya que este nuevo bucle se detendrá inmediatamente cuando llegue al límite de recuento de elementos, sin continuar hasta que detect()
vuelva a ser verdadero.