很多时候,我想要一个方法根据参数做一件事或另一件事。鉴于此课程:
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)
有更好的方法吗?
答案 0 :(得分:2)
我认为您的解决方案是合理的(正如 lx00st 的答案),但我想我可能会使用静态方法(类方法)而不是您发布的用例。
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)
答案 1 :(得分:0)
在更加oop-design-patern-way中,您应该将这些方法委托给子类
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
但是,除了你想要分离一些逻辑之外,使用“预编程”的功能更方便“