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]