I love Lua upvalues!
Сегодня обнаружил повод для радости. Итак, встречайте — это 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!
leave a comment