Я люблю 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:

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

%d такие блоггеры, как: