在 Ruby 中,如何确定类 A 是否继承自类 B 而无需实例化 A 对象?

发布于 2024-10-20 16:57:16 字数 205 浏览 2 评论 0 原文

假设我想确定 Admin 是否继承自 ActiveRecord::Base。一种方法是使用 Admin.new.kind_of? ActiveRecord::Base,但是实例化了一个未使用的Admin对象。

有没有一种简单的方法可以在不创建 Admin 对象的情况下执行此操作?

谢谢

Suppose I want to determine if Admin inherits from ActiveRecord::Base. One way is to do this is Admin.new.kind_of? ActiveRecord::Base, but that instantiates an unused Admin object.

Is there an easy way of doing this without creating an Admin object?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

乞讨 2024-10-27 16:57:16

当然,只需比较这两个类:

if Admin < ActiveRecord::Base
  # ...
end

有趣的是,虽然 如果 Admin 继承自 AR::BaseModule#< 将返回 true,如果不是这种情况,它将返回 falsenilfalse 表示反之亦然,而 nil 则用于不相关的类(例如 String 返回 nil >)。

Sure, just compare the two classes:

if Admin < ActiveRecord::Base
  # ...
end

It is interesting to note that while Module#< will return true if Admin inherits from AR::Base, it will return false or nil if that's not the case. false means that it is the otherway around, while nil is for unrelated classes (e.g. String < Range returns nil).

著墨染雨君画夕 2024-10-27 16:57:16

这很简单:

Admin < ActiveRecord::Base
=> true

It's pretty simple:

Admin < ActiveRecord::Base
=> true
回梦 2024-10-27 16:57:16
Admin.ancestors.include? ActiveRecord::Base

唔。嗯,这可行,但我们刚刚学到了一种更好的方法。似乎 Ruby 的 Module 定义一个 运算符 < 为此目的,并且自 class 源自模块这意味着<将直接测试派生类。

Admin.ancestors.include? ActiveRecord::Base

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.

苯莒 2024-10-27 16:57:16
Admin.ancestors.includes? ActiveRecord::Base

对于直系祖先,您也可以使用

Admin.superclass == ActiveRecord::Base
Admin.ancestors.includes? ActiveRecord::Base

For direct ancestry you could also use

Admin.superclass == ActiveRecord::Base
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文