ruby - 从 class 方法获取 class 的名称
ruby - get name of class from class method
我正在尝试从 class 中的静态方法中获取 class 的名称:
class A
def self.get_class_name
self.class.name.underscore.capitalize.constantize
end
end
虽然这个 returns Class 而不是 A。关于如何获得 A 有什么想法吗?
最终我还想要一个继承自 A 的 class B,它将使用相同的方法并在调用时将 return B。
我这样做的原因是因为我最终在这个域下有另一个对象:A::SomeOtherClass
我想使用我收到的结果。
删除.class
:
class A
def self.get_class_name
self.name.underscore.capitalize.constantize
end
end
self
在 class 的上下文中(而不是实例方法的上下文)指的是 class 本身。
这就是你写def self.get_class_name
定义一个class方法的原因。这意味着将方法 get_class_name
添加到 self
(又名 A
)。相当于def A.get_class_method
.
这也是为什么当您尝试 self.class.name
时得到 Class
- A
的 Object#class
是 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>
此输出:
class NiceClass
def self.my_class_method
puts "This is my #{name}"
end
end
NiceClass.my_class_method
将是:
This is my NiceClass
我正在尝试从 class 中的静态方法中获取 class 的名称:
class A
def self.get_class_name
self.class.name.underscore.capitalize.constantize
end
end
虽然这个 returns Class 而不是 A。关于如何获得 A 有什么想法吗?
最终我还想要一个继承自 A 的 class B,它将使用相同的方法并在调用时将 return B。
我这样做的原因是因为我最终在这个域下有另一个对象:A::SomeOtherClass
我想使用我收到的结果。
删除.class
:
class A
def self.get_class_name
self.name.underscore.capitalize.constantize
end
end
self
在 class 的上下文中(而不是实例方法的上下文)指的是 class 本身。
这就是你写def self.get_class_name
定义一个class方法的原因。这意味着将方法 get_class_name
添加到 self
(又名 A
)。相当于def A.get_class_method
.
这也是为什么当您尝试 self.class.name
时得到 Class
- A
的 Object#class
是 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>
此输出:
class NiceClass
def self.my_class_method
puts "This is my #{name}"
end
end
NiceClass.my_class_method
将是:
This is my NiceClass