Как принудительно остановить скрипт qlua программно из скрипта до окончания функции main?

Страницы: 1
RSS
Как принудительно остановить скрипт qlua программно из скрипта до окончания функции main?
 
Я знаю как остановить скрипт lua с помощью return, но это возможно сделать только внутри функции main.
А вот как остановить весь скрипт через подпрограмму, которую я создал, например:

------------Созданная мною функция-----------------------------------------------
function average_trend()
-- здесь идет проверка условий
-- здесь надо остановить весь скрипт из-за фатального несоответствия
-- здесь продолжается выполнение
return nil
end
----------------------------------------------------------------------------------------------

-----------Стандартная функция, основное выполнение программы-------
function main()
-- здесь идет проверка условий
return nil  -- останов скрипта из-за фатального несоответствия
-- здесь продолжается выполнение
end
----------------------------------------------------------------------------------------------
 
Любое исключение прервет выполнение скрипта

a = nil
b=a[1]
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Код
is_run = true

function average_trend() 
-- здесь идет проверка условий 
if фатальное условие then 
    is_run = false
    return
end
-- здесь продолжается выполнение 
   return nil 
end

function main()
  while is_run do
    -- здесь делаем что-то полезное, но не навсегда!
    -- чтобы цикл работал, т.е. делаем порциями
    sleep(200)
  end
end
 
Все спасибо.
Для меня более действенно будет как сказал s_mike@rambler.ru.
Второй вариант действенен для циклических операций, у меня один раз выполняется и все.
 
Yaroslav1357, в lua уже есть подобный функционал (исключения)
Код
error("Сообщение об ошибке");
как раз моментально прекратит выполнение скрипта.

Чтобы перехватывать исключения есть метод pcall
Код
function bad(str)
    message(str, 1);
    local t
    t[1] = nil;
end

function main()
    local success, err = pcall(bad, "test string");
    if not success then
        message("Error: " .. err);
    end
end
Сразу замечу, что в качестве аргумента метода error() можно передавать любой Lua тип. Он придёт во втором результате pcall без изменений.

Кроме того, нужно иметь в виду, что QLua вызывает каждый callback, метод main, и инициализацию нашего скрипта через тот же pcall (через Си-функцию lua_pcall, если быть совсем точным), т.е. QLua таким же образом получает сообщение об ошибке в нашем скрипте.
 
Вячеслав,Спасибо, это еще лучше чем сказал s_mike@rambler.ru, Надо будет попробовать.
Страницы: 1
Читают тему
Наверх