我有一个继承自 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
,因为 User
是 Class
的一个实例。
特别是,User
不是 ApplicationRecord
的实例。
通过 class
创建时 User
是 Class
的一个实例可能并不明显关键词:
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/