我知道在Ruby中,我可以使用respond_to?检查一个对象是否有特定的方法。
但是,给定类,我如何检查实例是否有特定的方法?
比如,就像
Foo.new.respond_to?(:bar)
但我觉得肯定有比实例化一个新实例更好的方法。
我知道在Ruby中,我可以使用respond_to?检查一个对象是否有特定的方法。
但是,给定类,我如何检查实例是否有特定的方法?
比如,就像
Foo.new.respond_to?(:bar)
但我觉得肯定有比实例化一个新实例更好的方法。
当前回答
试试Foo.instance_methods.include ?:酒吧
其他回答
klass.instance_methods。包括:method_name或"method_name",我认为这取决于Ruby版本。
我认为method_defined有问题?在Rails。它可能不一致或其他什么,所以如果你使用Rails,最好使用attribute_method?(attribute)中的东西。
测试method_defined?在ActiveRecord类上不工作,直到实例化”是一个关于不一致性的问题。
在我使用ruby 2.5.3的情况下,下面的句子已经完美地工作了:
value = "hello world"
value.methods.include? :upcase
它将返回一个布尔值true或false。
试试Foo.instance_methods.include ?:酒吧
你可以使用method_defined?如下:
String.method_defined? :upcase # => true
比instance_methods.include?其他人似乎都在建议。
请记住,你不会知道一个类是否动态响应一些调用method_missing,例如通过重新定义respond_to?,或者从Ruby 1.9.2开始定义respond_to_missing?。