一次定义类似的方法

时间:2016-06-08 12:17:48

标签: ruby

我看过像

这样的事情
[:toto, :tata, :titi].each do |kind|
    if "create_#{kind}" do
        something
    end
end

方法create_totocreate_tatacreate_titi在别处定义。

我想知道是否可以使用方法定义来实现它。我有多个名为end_{something}的方法,它们做同样的事情,我想知道是否可以将它们组合成一个,使用与上面相同的机制。

1 个答案:

答案 0 :(得分:3)

注意表达式if "create_#{kind}"将始终返回true,您可能意味着defined?("create_#{kind}")检查是否定义了方法。

你可以使用'method_missing'方法:

def method_missing(method_name, *arguments, &block)
  method = method_name.to_s 

  case method
  when 'create_toto'
    #do somthing
  when 'create_tata'
    #do somthing
  when 'create_titi'
    #do somthing
  else
    super
  end
end

您还可以动态定义方法:

[:toto, :tata, :titi].each do |kind|
  define_method "create_#{kind}" do
    #do something
  end
end