ruby - 从类方法获取类的名称

时间:2015-07-06 13:11:54

标签: ruby metaprogramming

我试图从类中的静态方法中获取类的名称:

class A
  def self.get_class_name
    self.class.name.underscore.capitalize.constantize
  end
end

虽然这会返回Class而不是A.有关如何获得A的任何想法?

最终我还希望有一个继承自A的B类,它将使用相同的方法,并在调用时返回B.

我这样做的原因是因为我最终在这个域下有另一个对象:A::SomeOtherClass我想使用我收到的结果来使用它。

2 个答案:

答案 0 :(得分:8)

删除.class

class A
  def self.get_class_name
    self.name.underscore.capitalize.constantize
  end
end
类的上下文中的

self(而不是实例方法的上下文)引用类本身。

这就是您编写def self.get_class_name来定义类方法的原因。这意味着将方法get_class_name添加到self(又名A)。它相当于def A.get_class_method

这也是为什么当您尝试self.class.name ClassObject#class A Classclass A puts "Outside: #{self}" def self.some_class_method puts "Inside class method: #{self}" end def some_instance_method puts "Inside instance method: #{self}" end end A.some_class_method A.new.some_instance_method

为了更清楚,请考虑输出:

Outside: A
Inside class method: A
Inside instance method: #<A:0x218c8b0>

这是:

{{1}}

答案 1 :(得分:0)

此输出:

class NiceClass
  def self.my_class_method
    puts "This is my #{name}"
  end
end

NiceClass.my_class_method

将会是:

This is my NiceClass