Да. Можно.
---
Продолжаю тему связывания и отражения.
В общем, ничего сложного нет. Все это безобразие объявляется в Window_Selectable
У него его имеется хэш handler<символ, метод>.
При обновлении вызывается следующий метод:
Который поочереди проверяет нажата ли кнопка, сопоставлен ли метод с соответствующим дескриптором (handle), а возвращаемый метод вызывает такое вот чудовище:Код:def process_handling return unless open? && active return process_ok if ok_enabled? && Input.trigger?(:C) return process_cancel if cancel_enabled? && Input.trigger?(:B) return process_pagedown if handle?(:pagedown) && Input.trigger?(:R) return process_pageup if handle?(:pageup) && Input.trigger?(:L) end
Совершенно неясно - для чего дважды выполняется проверка на существование метода, и первой модификацией надо убрать if ok_enabled? и иже с ним из метода process_handling. Какая-никакая, а оптимизация, особенно если в каком-либо из дочерних классов будет задействована вся клавиатура.Код:def call_handler(symbol) @handler[symbol].call if handle?(symbol) end
Итог: сократился объем кода, программировать менюшки стало проще. Однако вырос уровень абстракции. Задействовано отражение. Это неминуемо негативно скажется на производительности. Однако, вероятно, в рамках проекта на мейкере, это падение будет незначительным. Тем не менее, если я за полчаса изучения скриптов уже нашел такой ляп, стоит основательно их прошерстить на предмет оптимизации.





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

Социальные закладки