0

我的应用程序允许用户选择自己的数据适配器类。他可以将其作为自定义类的对象传递。然后我检查该对象是否具有作为有效数据适配器工作所需的特定方法。它看起来像这样:

def valid_object?(object)
  object.respond_to?(:method_1) &&
  object.respond_to?(:method_2) &&
  object.respond_to?(:method_3) &&
  object.respond_to?(:method_4) &&
  object.respond_to?(:method_5) &&
  object.respond_to?(:method_6) &&
  object.respond_to?(:method_7)
end

它看起来不太好。有没有更好的写法?没有那么多重复?

我听说其他语言有一种叫做接口的东西,可以让他们检查对象是否有特定的方法。那么也许有更好的方法来检查对象在 ruby​​ 中是否有效?

4

1 回答 1

2

您可以使用该Enumerable#all?方法执行此操作,如下所示:

[:method1, :method2, ..., :method7].all? { |m| object.respond_to?(m) }
于 2013-08-06T12:27:43.613 回答