带参数的别名方法

时间:2014-04-16 06:26:48

标签: ruby aliasing

我有一个方法

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 个答案:

答案 0 :(得分:3)

我不太确定我理解你的问题,但我相信这符合你的要求:

[:shift, :tab, :backspace].each do |k|
  define_method("press_#{k}") { press_button(k) }
end

现在定义了方法press_shiftpress_tabpress_backspace

答案 1 :(得分:0)

我想我找到了解决自己问题的方法。 method_missing Ruby钩子会帮助我。

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