Как завершить 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Причуда lua:
breakдолжна прийти непосредственно передend, хотя и не обязательноendпетли, из которой вы хотите вырваться, как вы можете видеть здесь.Кроме того, если вы хотите выйти из цикла при условии в начале или в конце цикла, как описано выше, часто вы можете изменить цикл, который вы используете, чтобы получить аналогичный эффект. Например, в этом примере мы могли бы поставить условие в цикле
while:Обратите внимание, что я слегка изменил поведение там, так как этот новый цикл остановится сразу же, когда он достигнет предела количества элементов, не продолжая до тех пор, покаwhile turtle.getItemCount(16) < 64 do if turtle.detect() then turtle.dig() end enddetect()снова не станет истинным.
В стандартном Lua нет глобальной функции с именем
Однако существует функцияexit.os.exit. В Lua 5.1 он имеет один необязательный аргумент-код ошибки. В Lua 5.2 есть второй необязательный параметр, указывающий, должно ли состояние Lua быть закрыто перед выходом. Но обратите внимание, чтоMinecraft ComputerCraft может предоставлять другую функцию, чем стандартнаяos.exit.
Вы также можете завершить его вручную, удерживая нажатой клавишуCtrl + T несколько секунд в интерфейсе черепаха/компьютер.
Оболочка.exit() закрывает скрипт lua в программе computer craft. для получения дополнительной информации перейдите по ссылке 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()назовем это снова внутренним