我的应用程序允许用户选择自己的数据适配器类。他可以将它作为自定义类的对象传递。然后我检查该对象是否具有作为有效数据适配器工作所需的特定方法。它看起来像这样:
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中是否有效?
答案 0 :(得分:2)
您可以使用Enumerable#all?
方法执行此操作,如下所示:
[:method1, :method2, ..., :method7].all? { |m| object.respond_to?(m) }