在 Ruby 中,有没有比"case - when"更优雅的方式来调用方法?



在Rails 3.1中,我想通过使用一个接受参数数据的create方法来创建一个嵌入对象,但是我想知道是否有比下面的case方法更优雅的方法:

def method_call(obj,data)
  case obj
  when 'a' then User.create_a(data)
  when 'b' then User.create_b(data)
  when 'c' then User.create_c(data)
  end
end

我真的很想做下面的事情,但是这会导致错误,因为我传递的数据:

def method_call(obj,data)
  User.send("create_#{obj}")(data)
end

有什么建议吗?

send方法使用与被调用的方法相同的参数:

User.send("create_#{obj}", data)

这是否是最优雅的解决方案取决于:我将把决策过程留给User类,这可能以多种方式发生(例如,像这样的发送,Proc s的散列,等等)。工厂服务是另一种选择。

User.create(how, data) # "how" is a, b, c

无论它在哪里,都要使它明显——这使它易于扩展、修复和推理。

相关内容

最新更新