如何获得类方法?

时间:2013-11-28 10:21:40

标签: ruby

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

5 个答案:

答案 0 :(得分:3)

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

class Foo
  def self.bar
  end
end

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

答案 1 :(得分:2)

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

rails c

类型:

 Class.methods 

您将把它们都列在一个列表中。

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

Class_name.methods

答案 2 :(得分: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]

答案 3 :(得分:0)

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

结果:

[:hello]

答案 4 :(得分:0)

好吧,如果你有这个:

object = Object.new

并且您希望获得Objectobject的父级)的类方法列表,您可以通过以下方式获取:

object.class.methods

如果您有一些课程,请说Samuel您可以通过Samuel.methods轻松获得课程方法。你可以这样做,因为Samuel类Class 的实例,因此你可以从普通对象中获取它的方法。