小编典典

给定一个类,查看实例是否有方法(Ruby)

all

我知道在 Ruby 中我可以respond_to?用来检查一个对象是否有某种方法。

但是,给定类,我如何检查实例是否具有某种方法?

即,类似

Foo.new.respond_to?(:bar)

但我觉得肯定有比实例化新实例更好的方法。


阅读 97

收藏
2022-05-29

共1个答案

小编典典

我不知道为什么每个人都建议您应该使用instance_methods以及include?何时method_defined?完成这项工作。

class Test
  def hello; end
end

Test.method_defined? :hello #=> true

笔记

如果您从另一种 OO 语言开始使用 Ruby,或者您认为这method_defined仅意味着您明确定义的方法:

def my_method
end

然后阅读:

在 Ruby 中,模型上的属性(属性)基本上也是一种方法。所以method_defined?也会为属性返回 true, 而不仅仅是方法。

例如:

给定一个具有 String 属性的类的实例first_name

<instance>.first_name.class #=> String

<instance>.class.method_defined?(:first_name) #=> true

因为first_name既是属性又是方法(以及字符串类型的字符串)。

2022-05-29