ruby-on-rails - 为什么 'class' 显示 'Class' 而 'ancestors.include? Class' 是 'false' ?

标签 ruby-on-rails ruby

我有一个继承自 ApplicationRecord 的类 User。当我检查 User.ancestors.include?(Class) 时,结果是 false 但对于 User.class,结果是

在这种情况下,class 方法提供的信息有什么用例?它真正告诉我什么是实用的?好像跟继承关系不大。

最佳答案

What's the use case for the information supplied by the class method in such cases? What does it really tell me to be of practical use? It doesn't seem to have anything to do with inheritance.

class 对每个对象都以相同的方式工作。在类上调用 class 提供与在实例上调用 class 相同的信息。那是因为在 Ruby 中,类也是实例。

'foo'.class 返回 String 因为 'foo'String 的实例。同样,User.class 返回 Class,因为 UserClass 的一个实例。

特别是,User 不是 ApplicationRecord 的实例。

通过 class 创建时 UserClass 的一个实例可能并不明显关键词:

class User < ApplicationRecord; end

但是当您通过 Class.new 显式创建它时,它会变得非常明显: (两个例子产生相同的结果)

User = Class.new(ApplicationRecord)
User.class #=> Class

因为上面就像:(使用String.new 来演示)

foo = String.new('foo')
foo.class #=> String

关于ruby-on-rails - 为什么 'class' 显示 'Class' 而 'ancestors.include? Class' 是 'false' ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50224369/

相关文章:

ruby-on-rails - 在 Jruby/JRack Tomcat 上发送文件

ruby - Heroku FreeTDS,如何将 Rasil SQL Server 与带有 Multi Buildpacks 的 TinyTDS 一起使用

ruby-on-rails - 在 Ruby/Rails 中处理没有时区的时间/日期时间

ruby-on-rails - rails 使用 link_to 和命名空间路由

css - Rails 5 - 公用文件夹中的静态 index.html 在生产环境中不显示背景图片

ruby - (直接)AWS Lambda 调用响应状态代码为 200,尽管有未处理的函数错误

javascript - 交互式 JavaScript gem ?

Ruby 方法名称插值

ruby-on-rails - rspec 的集成测试和正常测试有什么区别?

ruby-on-rails - 无法使用 PostGIS/RGeo 保存多边形