测试 Ruby 类是否是另一个类的子类
我想测试一个类是否继承另一个类,但似乎不存在这样的方法。
class A
end
class B < A
end
B.is_a? A
=> false
B.superclass == A
=> true
(注意,上面的 is_a?
测试没有任何意义,因为第一个注释正确指出 B.new.is_a?(A)
有意义,但不是通常适用,因为并非每个类都有接受 0 个参数的 #initialize 方法)
我想要的一个简单实现是:
class Class
def is_subclass_of?(clazz)
return true if superclass == clazz
return false if self == Object
superclass.is_subclass_of?(clazz)
end
end
但我希望它已经存在。
I would like to test whether a class inherits from another class, but there doesn't seem to exist a method for that.
class A
end
class B < A
end
B.is_a? A
=> false
B.superclass == A
=> true
(N.B. the is_a?
test above does not make any sense, as the first comment correctly points out B.new.is_a?(A)
would make sense, but is not generally applicable, as not every class has a #initialize method that accepts 0 arguments)
A trivial implementation of what I want would be:
class Class
def is_subclass_of?(clazz)
return true if superclass == clazz
return false if self == Object
superclass.is_subclass_of?(clazz)
end
end
but I would expect this to exist already.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
只需使用
<
运算符或使用
<=
运算符Just use the
<
operatoror use the
<=
operator也可用:
这与
B
B
B
B
B
B
B
B
B
B
B
B
B
B < 的(较短)答案略有不同。 A
因为B
包含在B.ancestors
中:这是否需要取决于您的用例。
Also available:
This differs slightly from the (shorter) answer of
B < A
becauseB
is included inB.ancestors
:Whether or not this is desirable depends on your use case.