Метод псевдонима с аргументом
У меня есть метод
def press_button(*key_buttons)
# some interaction to send button
end
и я использую это с аргументом: :shift
, :tab
, :backspace
и т.д. Я хочу псевдонимы для этого метода с фиксированным аргументом, чтобы press_shift
будет стоять за press_button(:shift)
, Можно ли сделать это? Или я должен обернуть этот метод, как:
def press_shift
press_button(:shift)
end
def press_tab
press_button(:tab)
end
def press_backspace
press_button(:backspace)
end
2 ответа
Решение
Я думаю, что нашел решение для своего собственного вопроса. method_missing
Рубиновый крючок поможет мне.
def method_missing(method_name, *args)
if method_name.intern.include?('press')
argument = /_(\w*)$/.match(method_name.intern)[0]
press_button(argument.intern)
else
super
end
end
Я не совсем уверен, что понимаю ваш вопрос, но я считаю, что это делает то, что вы просите:
[:shift, :tab, :backspace].each do |k|
define_method("press_#{k}") { press_button(k) }
end
Теперь методы press_shift
, press_tab
, а также press_backspace
определены.