这些不应该是一样的吗?
p String.ancestors
p String.class.ancestors
相反,我得到:
[String, Comparable, Object, Kernel, BasicObject]
[Class, Module, Object, Kernel, BasicObject]
感谢您的帮助。
最佳答案
长话短说
Shouldn't these be the same?
不,他们不应该,为什么?
完整答案
Foo
之间的区别和 Foo.class
与f
之间相同和 f.class
class Foo; end
f = Foo.new
f # => #<Foo:0x007ff289849170>
f.class # => Foo
Foo # => Foo
Foo.class # => Class
Foo
是一个对象,Foo.class
是它的类。
如您所见,类和类的类的层次结构 fork ,位于 Object
。 .因为 ruby 中的一切都是对象( block 除外 :))。但这不一定是这样,这只是 Matz 的设计决定(我猜是 Matz)。在某些语言中,这是两个完全独立的不相交的层次结构。你不要混合对象和它们的类。这就像混合甜蜜和方形的东西。
关于ruby - "Foo"和 "Foo.class"有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15492092/