这些不应该相同吗?
p String.ancestors
p String.class.ancestors
相反,我得到:
[String, Comparable, Object, Kernel, BasicObject]
[Class, Module, Object, Kernel, BasicObject]
感谢您的帮助。
答案 0 :(得分:7)
这些不应该相同吗?
不,他们不应该,为什么?
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
是它的类。
您可以在Object
看到类和类类别分叉的层次结构。因为ruby中的所有内容都是一个对象(除了块:))。但它不一定是这样,只是Matz的设计决定(我猜它是Matz )。在某些语言中,这些是两个完全独立的非交叉层次结构。您不要混合对象及其类。这就像混合甜蜜和方形的东西。
答案 1 :(得分:1)
您的问题未进行优化以进行最小化比较。而不是比较:
String.ancestors
String.class.ancestors
你应该比较一下:
String
String.class
这些相当于:
String
Class
因为String
是Class
的实例。由于String
和Class
不同,因此ancestors
没有理由相同。