如何获取类方法



Ruby Module有一个方法instance_methods,可以返回该类的方法列表。但是如何检索类的类方法列表?

您可以将false参数传递给 Object#methods。

class Foo
  def self.bar
  end
end
Foo.methods(false) #=> [:bar]

使用以下命令转到 rails 控制台:

rails c

类型:

 Class.methods 

你会把它们都放在一个列表中。

如果要获取特定类的方法,请键入:

Class_name.methods

你需要知道的第一件事是,Ruby 中没有类方法这样的东西。我们通俗地称之为"类方法"实际上只不过是一种普通的单例方法。所有对象都可以有单例方法,类没有什么特别之处。

实际上,也没有单例方法!我们通俗地称之为"单例方法"实际上只是对象的单例类的常规无聊实例方法。

因此,由于您已经知道如何列出实例方法,

并且您现在知道类方法实际上是实例方法,因此您已经知道如何回答自己的问题:

class Foo; def self.bar; end end
class << Foo
  instance_methods(false)
end
# => [:bar]
Foo.singleton_class.instance_methods(false)
# => [:bar]

但是,即使实际上不存在单例方法,讨论它们仍然很有用,并且上面的构造非常不方便,以至于实际上有专门的方法执行上述等效的操作:

Foo.singleton_methods(false)
# => [:bar]

好吧,如果你有这个:

object = Object.new

并且您想获取Object(object 的父级(的类方法列表,您可以通过以下方式获得:

object.class.methods

如果你有一些类,假设Samuel你可以通过Samuel.methods轻松获得类方法。您可以这样做Samuel因为它是类类的实例,因此您可以像从普通对象一样获取其方法。

class Song
  def self.hello;end
end
p Song.singleton_methods

结果:

[:hello]

最新更新