在 Ruby 中,如何确定类 A 是否继承自类 B 而无需实例化 A 对象?
假设我想确定 Admin
是否继承自 ActiveRecord::Base
。一种方法是使用 Admin.new.kind_of? ActiveRecord::Base,但是实例化了一个未使用的Admin
对象。
有没有一种简单的方法可以在不创建 Admin 对象的情况下执行此操作?
谢谢
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
当然,只需比较这两个类:
有趣的是,虽然 如果
Admin
继承自AR::Base
,Module#<
将返回true
,如果不是这种情况,它将返回false
或nil
。false
表示反之亦然,而nil
则用于不相关的类(例如String 返回
nil
>)。Sure, just compare the two classes:
It is interesting to note that while
Module#<
will returntrue
ifAdmin
inherits fromAR::Base
, it will returnfalse
ornil
if that's not the case.false
means that it is the otherway around, whilenil
is for unrelated classes (e.g.String < Range
returnsnil
).这很简单:
It's pretty simple:
唔。嗯,这可行,但我们刚刚学到了一种更好的方法。似乎 Ruby 的 Module 类 定义一个 运算符
<
为此目的,并且自 class 类源自模块,这意味着<
将直接测试派生类。Hmm. Well, this works, but we've just learned a nicer way. It seems that Ruby's Module class defines an operator
<
for this purpose, and since class Class derives from Module, that means<
will directly test for derived classes.对于直系祖先,您也可以使用
For direct ancestry you could also use