根据传递的参数执行不同的操作:选择最佳模式

Different actions depending on passed arguments: best pattern to choose

很多时候,我想要一个方法来根据参数做一件事或另一件事。鉴于此 class:

class SendMailJob 
  def initialize(action_to_perform, user)
    self.send(action_to_perform.to_s, args)
  end

  private
  def feedback(user)
    puts "We send feedback email #{user}"
  end
  def any_help(user)
    puts "We send any_help email #{user}"
  end
end

取决于我想做什么,我用一个带有选项的符号来称呼它:

SendMailJob.new(:feedback, @user)

有更好的方法吗?

以更 oop-design-patern 的方式,您应该将这些方法委托给子类

class SendMailJob
  def initialize(user)
    do_action user
  end
end 

class FeedbackJob < SendMailJob
  def do_action(user)
    puts "We send feedback email #{user}"
  end
end

但是借助元编程的强大功能,使用 "send" 会更方便,除非您想分离一些逻辑

我认为您的解决方案是合理的(lx00st 的回答也是如此),但我认为我可能会使用静态方法(class 方法)而不是使用你发布的案例。

class SendMailJob
  def self.feedback(user)
    puts "We send feedback email #{user}"
  end

  def self.any_help(user)
    puts "We send feedback email #{user}"
  end
end

SendMailJob.feedback(@user)