Не работает функция обратного вызова

Страницы: 1
RSS
Не работает функция обратного вызова
 
Всем здравия! Не могу понять, почему не работает функция. С переменными путаницы нет, локальная объявлена. Что не так?
Код
SetTableNotificationCallback (Tab1, f12)
 local f12 = function(Tab1, msg, X, Y)
      if (msg==QTABLE_LBUTTONDOWN ) then
          if (X==13 and Y==1) then
             message("Робот работает",1)
            elseif (X==13 and Y==3) then
             message("Робот остановлен",1)
             is_run = false
          end
     end
   end
 
Цитата
Сергей написал:
С переменными путаницы нет
Таки есть. В списке аргументов SetTableNotificationCallback переменная f12 еще не объявлена, вы по факту nil устанавливаете в качестве колбека. Надо так
Код
SetTableNotificationCallback(Tab1, function(Tab1, msg, X, Y) ... end)
 
Цитата
Anton написал:
SetTableNotificationCallback(Tab1, function(Tab1, msg, X, Y) ... end)
не пойму я это.

А если я локальную объявляю раньше SetTableNotificationCallback() ?
 
Цитата
Сергей написал:
А если я локальную объявляю раньше SetTableNotificationCallback() ?
Тогда все нормально будет. Надо просто понять, локальная относительно чего. Варианты:
Код
function Global() -- глобальная, видна из всех функций и файлов
end

local function One() -- локальная относительно этого файла, не видна из других файлов (подключенных через require или еще как)
  local function Two() -- локальная относительно функции One, не видна вне функции One
    local function Three() -- локальная относительно функции Two, не видна вне функции Two
      -- и так далее
    end
  end
end
 
Хотя в вашем случае надо просто заменить
Код
local f12 = function(Tab1, msg, X, Y)
на
Код
local function f12(Tab1, msg, X, Y)
 
Да, спасибо за разъяснения
Страницы: 1
Читают тему (гостей: 1)
Наверх