Dan*_*min 7 ruby metaprogramming
我试图从类中的静态方法中获取类的名称:
class A
def self.get_class_name
self.class.name.underscore.capitalize.constantize
end
end
Run Code Online (Sandbox Code Playgroud)
虽然这会返回Class而不是A.任何关于如何获得A的想法?
最后,我还希望有一个继承自A的B类,它将使用相同的方法,并在调用时返回B.
我这样做的原因是因为我最终在这个域下有另一个对象:A::SomeOtherClass我想使用我收到的结果来使用它.
删除.class:
class A
def self.get_class_name
self.name.underscore.capitalize.constantize
end
end
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
这是:
Outside: A
Inside class method: A
Inside instance method: #<A:0x218c8b0>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6114 次 |
| 最近记录: |