让我们假设我有一个类A
和B
那里B
继承A
.如何在中打印父类名称B
class A
end
class B < A
end
Run Code Online (Sandbox Code Playgroud)
我试过的一些事情
>> B.new.class #=> B #which is correct
>> B.new.parent #=> Undefined method `parent`
>> B.parent #=> Object
>> B.parent.class #=> Class
Run Code Online (Sandbox Code Playgroud)
谢谢 :)
Ser*_*sev 120
class A
end
class B < A
end
B.superclass # => A
B.superclass.name # => "A"
Run Code Online (Sandbox Code Playgroud)
Jam*_* S. 57
如果你想要完整的祖先堆栈尝试:
object.class.ancestors
Run Code Online (Sandbox Code Playgroud)
例如:
> a = Array.new
=> []
> a.class.ancestors
=> [Array, Enumerable, Object, Kernel, BasicObject]
Run Code Online (Sandbox Code Playgroud)
小智 18
给定一个对象(实例化类),您可以派生父类
>> x = B.new
>> x.class.superclass.name
=>"A"
Run Code Online (Sandbox Code Playgroud)
小智 12
如果谷歌带来了任何在Rails工作的人,你可能会想要的是base_class
,同样superclass
也会遍历ActiveRecord继承结构.
class A < ActiveRecord::Base
end
class B < A
end
> A.superclass
=> ActiveRecord::Base
> B.superclass
=> A
> A.base_class
=> A
> B.base_class
=> A
Run Code Online (Sandbox Code Playgroud)
更深入...
class C < B
end
> C.base_class
=> A
Run Code Online (Sandbox Code Playgroud)
换句话说,base_class
为您提供继承树的顶部,但仅限于应用程序的上下文.但是公平警告,就Rails而言,"你的应用程序"包含你正在使用的任何宝石,所以如果你有一个模型,它继承了gem中定义的东西,base_class
将返回gem的类,而不是你的.
你正在寻找的术语是superclass
.事实上,你可以做B.superclass
来获得A
.(您还B.ancestors
可以获取它继承的所有类和模块的列表 - 类似于[B, A, Object, Kernel, BasicObject]
.)
归档时间: |
|
查看次数: |
52538 次 |
最近记录: |