Отключение скрипта при получении Nil

Страницы: 1
RSS
Отключение скрипта при получении Nil
 
Здравствуйте.

Есть скрипт, который берет данные из стакана котировок для дальнейшей работы.
Если из стакана пропадают котировки (например, из-за сбоя сети), то функции возвращает Nil, скрипт отключается и его нужно включать вручную.

Можно добавить какой-нибудь код, чтобы этого отключения не было?

Заранее спасибо.
 
Leonid,
да, например добавить проверку на nil вида:
если nil то ничего не делать
 
Sergey Gorokhov,а как это должно выглядеть на луа?

if xxx==nil then , а дальше как?
 
Цитата
Leonid написал:
Sergey Gorokhov,а как это должно выглядеть на луа?

if xxx==nil then , а дальше как?
лучше так:
if (xxx) then
--тут чтото делаем
end

if расценивает nil как false, а любое значение как true
 
Sergey Gorokhov, все равно отключается даже если случайно стакан закрыть

Может не туда if-then пишу?
Код
   if xxx>1 then

      while stopped == false do

         Quotes_1 = getQuoteLevel2("TQTF", Code_1)

        end

 
Leonid,
Пропишите условие внутри цикла
 
Sergey Gorokhov, пробовал уже - все равно выключается
 
Leonid,
Очевидно что не так пробовали как нужно.
Выложите Ваш код.
 
Sergey Gorokhov, такой вариант. При закрытии стакана или отключении инета, тут же останавливается
Код
local xxx=100

local stopped = false
function OnStop()
   stopped = true
   return 1000
end

function main()

   local Table = AllocTable()
   AddColumn(Table, 1,"FXRL", true, QTABLE_DOUBLE_TYPE, 18)
   CreateWindow(Table)
   SetWindowCaption(Table, "table")
   SetWindowPos(Table, 0, 10, 400, 90)

   InsertRow(Table, -1)

   while stopped == false do

      if xxx>0 then
         Quotes_1 = getQuoteLevel2("TQTF", "FXRL")
         offer_1= tonumber(Quotes_1.offer_count)
         fxrl_pr = tonumber(Quotes_1.offer[1].price)
         SetCell(Table, 1, 1, tostring(fxrl_pr))

      end

      sleep(1000)
   end
end
 
Leonid,
очевидно Вы не поняли рекомендации.
Вы говорите
Цитата
Leonid написал:
функции возвращает Nil, скрипт отключается

Вам было сказано
Цитата
Sergey Gorokhov написал:
добавить проверку на nil вида:если nil то ничего не делать

Вы же просто указали непонятное условие  if xxx>0 then где xxx всегда при любых вариантах равно 100 и никогюда не изменится
рекомендуем еще раз более внимательно прочитать рекомендацию
 
Sergey Gorokhov, так я следовал Вашей рекомендации:
лучше так:
if (xxx) then
--тут чтото делаем
end

if расценивает nil как false, а любое значение как true

Насколько я понял, в качестве ххх можно взять совершенно любую цифру.
Как правильно тогда?

 
Цитата
Leonid написал:
Насколько я понял, в качестве ххх можно взять совершенно любую цифру.Как правильно тогда?
Вы говорите: "когда стакан возвращает nil код не работает"
Вам говорят  "добавьте проверку когда стакан возвращает nil то ничего не делать" ИЛИ (на ваш вкус) "добавьте проверку когда стакан возвращает НЕ nil то делать то что надо"

так понятно?

Или так:

xxx = стакан
если xxx не nil то
чтото делаем
енд
 
Код
 while stopped == false do

         Quotes_1 = getQuoteLevel2("TQTF", "FXRL");
             if Quotes_1 then
                ----
             end;
 
      sleep(1000)
 end
 
Попробовал, оба варианта, но  не помогает
вопрос не в том, что скрипт не работает, а в том, что он выключается и надо заново его включать нажатием play...
Код
if Quotes_1 then
  xxxx
end

if Quotes_1 ~= nil then
    xxxxx
end
 
Leonid,
Выложите весь код.
 
Sergey Gorokhov,
Код
local stopped = false
function OnStop()
   stopped = true
   return 1000
end

function main()

   local Table = AllocTable()
   AddColumn(Table, 1,"FXRL", true, QTABLE_DOUBLE_TYPE, 18)
   CreateWindow(Table)
   SetWindowCaption(Table, "table")
   SetWindowPos(Table, 0, 10, 400, 90)

   InsertRow(Table, -1)

   while stopped == false do

      Quotes_1 = getQuoteLevel2("TQTF", "FXRL")

      if Quotes_1 then

         offer_1= tonumber(Quotes_1.offer_count)
         fxrl_pr = tonumber(Quotes_1.offer[1].price)
         SetCell(Table, 1, 1, tostring(fxrl_pr))

      end

      sleep(1000)
   end
end
 
Код
      if Quotes_1 then

         offer_1= tonumber(Quotes_1.offer_count)
         fxrl_pr = tonumber(Quotes_1.offer[1].price)
         SetCell(Table, 1, 1, tostring(fxrl_pr))

      end
Смотрим внутрь вашего условного блока. Что сама по себе таблица получена (не nil), вы проверили в условии. Далее получаете offer_count, это ок, там какое-то число, в том числе и 0 может быть. Далее без проверки пытаетесь получить offer[1].price. Так-так, а если в offer_count был 0, сколько элементов в массиве offer? Нисколько, надо полагать? А что же будет тогда в offer[1]? Не nil ли? А что будет, если из этого нила попытаться вытащить поле price?
 
Anton, я недавно начал кодить на lua, поэтому что где может быть во всех деталях не знаю.
Поэтому и спрашиваю тут.
 
Цитата
Leonid написал:
что где может быть во всех деталях не знаю
Так вот и написал, что где может (не) быть. Дело не в луа, а вообще в подходе, на каждом выборе надо в голове составить "полную группу" всех возможных вариантов и особенно крайние случаи рассмотреть. Вариант получить nil из getQuoteLevel2 вы предусмотрели, а вариант получить пустой массив - нет.
Страницы: 1
Читают тему
Наверх