Я люблю Lua. I love Lua.

I love Lua upvalues!

Posted in Uncategorized by ilovelua on 22 июня, 2011

Сегодня обнаружил повод для радости. Итак, встречайте — это upvalues!

Это связано с вчерашней темой про калбеки. Калбеком в окно передается Lua функция без параметров. А в нашем существующем редакторе, требуется вызывать функцию с параметром. Что нам поможет? Upvalues!

Дано:

Функция установки калбека для окна:

function setCallback(self, callback, key1, key2, key3, key4)
  gui.WindowSetCallback(self.widget, callback, key1, key2, key3, key4)
end

и функция для установки клавишной комбинации:

-- ... - список кнопок
function addKeyCombination(self, callback, object, ...)
  ???
end

для которой должно быть вызвано callback(object).

Что делать? А все очень просто:

-- ... - список кнопок
function addKeyCombination(self, callback, object, ...)
  self:setCallback(function () callback(object) end, ...)
end

Мы создаем безымянную функцию без параметров, внутри которой вызываем калбек с параметром. Многоточие пробрасывает остальные параметры функции addKeyCombination в функцию setCallback.

Лаконично. Красиво. Изящно.

Браво, Lua!

Tagged with:

Оставьте комментарий