Хозяйке на заметку: OnStop()

Страницы: 1
RSS
Хозяйке на заметку: OnStop(), или "Зачем вы это делаете, мистер Андерсон?"
 
Код
stopflag = false

OnI nit = function()
   OnS top = function()
      message("Hello, I'm OnStop")
      stopflag = true
      return 10000
   end
end

main = function()
   while not stopflag do
      sleep(1000)
   end
end

Три дня в отладчике, три раза свой код переписал, "где ж я дедлок-то устроил". Ан нет, не я. Все колбеки как колбеки, OnStop почему-то кэшируется где-то до начала OnInit, так что в OnInit ее переопределять уже бесполезно. Зачем, зачем вы это делаете, мистер Андерсон?

П.С. Тут ответа мистера Андерсона в общем-то не требуется, равно как и желать особо нечего, ну так оно вот есть и есть, жаль только, что нигде об этом не написано. Теперь написано - здесь.

П.П.С. OnI nit, OnS top это не я так написал, это движок форума упорно поправляет.
 
Утро вечера мудренее. Вот так будет работать
Код
stopflag = false

main = function()
end

OnS top = function()
end

OnI nit = function()
   main = function()
      while not stopflag do
         sleep(1000)
      end
   end
   OnS top = function()
      message("Hello, I'm OnStop")
      stopflag = true
      return 10000
   end
end
Или, словами говоря, сначала создаем функции-заглушки, потом в процессе работы их можно переопределять на что угодно. Естественно, речь больше о lua_pushcclosure() / lua_setglobal(), скрипты просто иллюстрация.
 
В первом случае глобальная OnS top = nil, поэтому описанная  OnStop является локальной по области видимости внутри OnInit.
Quik видит  OnS top = nil.
То же самое будет и с переменными...
 
Олег, да, почему-то ожидалось, что раз эти функции описаны в доке, они должны существовать на момент запуска скрипта в виде каких-то внутренних заглушек, ан нет. Ну да ничего страшного, сами заглушек наделали, делов на копейку.
Страницы: 1
Читают тему (гостей: 1)
Наверх