一次定义类似的方法

  • 本文关键字:方法 定义 一次 ruby
  • 更新时间 :
  • 英文 :


我见过类似的东西

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

其中方法create_totocreate_tatacreate_titi在别处定义。

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

请注意表达式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

最新更新