2013-11-28 48 views
1

红宝石Module有一个方法instance_methods可以返回该类的方法列表。但是如何检索一个类的类方法列表?如何获取类方法?

+0

你W¯¯蚂蚁*类的方法*被** **仅在该特定的类中定义** **未了继承(/含),是吗? –

回答

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

结果:

[:hello] 
2

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

class Foo 
    def self.bar 
    end 
end 

Foo.methods(false) #=> [:bar] 
+0

将** s **添加到Object#方法及其链接。 –

0

好了,如果你有这样的:

object = Object.new 

,你想要得到的Object(的object父)类方法列表,你可以得到通过:

object.class.methods 

而且如果您有一些课程,比如说Samuel,您可以通过Samuel.methods轻松获得课程方法。您可以这样做,因为Samuel类类的实例,因此您可以像从普通对象那样获取其方法。

1

你需要知道的第一件事是,有没有这样的事情在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] 
+0

当使用singleton_methods,似乎false参数是没有必要的。 – uncutstone

相关问题