Как завершить сценарий Lua?
Как бы я прекратил сценарий Lua? Прямо сейчас у меня проблемы с exit(), и я не знаю, почему. (Это больше вопрос Minecraft ComputerCraft, так как он использует включенные API.) Вот мой код:
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
7 ответов
как говорится в ответе прапина, в Lua функция os.exit([code])
прекращает выполнение основной программы. Это, однако, может быть не то, что вы ищете, потому что вызов os.exit
завершит не только ваш скрипт, но и родительские экземпляры Lua, которые работают.
на Minecraft ComputerCraft, называя error()
также выполнит то, что вы ищете, но используя его для других целей, чем действительно завершение сценария после ошибки случившееся, вероятно, не является хорошей практикой.
поскольку в Lua все файлы скриптов также считаются функциями, имеющими свою собственную область, предпочтительным способом выхода из скрипта было бы использовать 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
на break
оператор пропустит строку после for
, while
или 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
причуда Луа: break
должен прийти непосредственно перед end
, хотя и не обязательно end
петли, из которой вы хотите вырваться, как вы можете видеть здесь.
кроме того, если вы хотите выйти из цикла при условии в начале или конце цикла, как указано выше, часто вы можете изменить цикл, который вы используете, чтобы получить аналогичный эффект. Например, в в этом примере мы могли бы поставить условие while
петли:
while turtle.getItemCount(16) < 64 do
if turtle.detect() then
turtle.dig()
end
end
обратите внимание, что я тонко изменил поведение немного там, так как этот новый цикл остановится сразу, когда он достигнет предела количества элементов, не продолжая до detect()
снова становится правдой.
вы также можете прекратить его вручную, удерживая Ctrl + T несколько секунд в интерфейсе черепаха/компьютера.
shell.exit () закрывает сценарий lua в компьютере. для получения дополнительной информации перейдите вhttp://computercraft.info/wiki/Shell.exit
не использовать while true
сделайте что-нибудь вроде этого:
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()
wil назовем его снова внутренним
Не используйте while true
. Вместо этого используйте что-то вроде этого:
while turtle.getItemCount(16) < 64 do
if turtle.detect() then
turtle.dig()
end
end
Она будет работать для вас.