我试图从类中的静态方法中获取类的名称:
class A
def self.get_class_name
self.class.name.underscore.capitalize.constantize
end
end
虽然这会返回Class而不是A.有关如何获得A的任何想法?
最终我还希望有一个继承自A的B类,它将使用相同的方法,并在调用时返回B.
我这样做的原因是因为我最终在这个域下有另一个对象:A::SomeOtherClass
我想使用我收到的结果来使用它。
答案 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
Class
时Object#class
A
Class
为class 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