Ruby 什么';这两者之间的区别是什么;"富",;及;“Foo.class”吗;?

Ruby 什么';这两者之间的区别是什么;"富",;及;“Foo.class”吗;?,ruby,Ruby,这些不应该是一样的吗 p String.ancestors p String.class.ancestors 相反,我得到: [String, Comparable, Object, Kernel, BasicObject] [Class, Module, Object, Kernel, BasicObject] 谢谢你的帮助。TL;博士 这些不应该是一样的吗 p String.ancestors p String.class.ancestors 不,他们不应该,为什么 完整答案 Foo和

这些不应该是一样的吗

p String.ancestors
p String.class.ancestors
相反,我得到:

[String, Comparable, Object, Kernel, BasicObject]
[Class, Module, Object, Kernel, BasicObject]
谢谢你的帮助。

TL;博士 这些不应该是一样的吗

p String.ancestors
p String.class.ancestors
不,他们不应该,为什么

完整答案
Foo
Foo.class
之间的差异与
f
f.class

class Foo; end

f = Foo.new

f # => #<Foo:0x007ff289849170>
f.class # => Foo

Foo # => Foo
Foo.class # => Class
Foo类;结束
f=Foo.new
f#=>#
f、 类#=>Foo
Foo#=>Foo
Foo.class#=>class
Foo
是一个对象,
Foo.class
是它的类

如您所见,在
Object
中,类和类的类的层次结构是分叉的。因为ruby中的所有东西都是对象(除了块:))。但不一定要这样,这只是Matz的设计决定(我猜是Matz)。在某些语言中,这是两个完全独立的不相交的层次结构。不能混合对象及其类。这就像把甜的和方的东西混合在一起。

TL;博士 这些不应该是一样的吗

p String.ancestors
p String.class.ancestors
不,他们不应该,为什么

完整答案
Foo
Foo.class
之间的差异与
f
f.class

class Foo; end

f = Foo.new

f # => #<Foo:0x007ff289849170>
f.class # => Foo

Foo # => Foo
Foo.class # => Class
Foo类;结束
f=Foo.new
f#=>#
f、 类#=>Foo
Foo#=>Foo
Foo.class#=>class
Foo
是一个对象,
Foo.class
是它的类


如您所见,在
Object
中,类和类的类的层次结构是分叉的。因为ruby中的所有东西都是对象(除了块:))。但不一定要这样,这只是Matz的设计决定(我猜是Matz)。在某些语言中,这是两个完全独立的不相交的层次结构。不能混合对象及其类。这就像是把甜的东西和方的东西混合在一起。

你的问题没有经过优化以进行最小的比较。而不是比较:

String.ancestors
String.class.ancestors
您应该比较:

String
String.class
这相当于:

String
Class

因为
String
类的一个实例。由于
字符串
不同,因此没有理由让它们的
祖先
相同。

您的问题没有经过优化以进行最小的比较。而不是比较:

String.ancestors
String.class.ancestors
您应该比较:

String
String.class
这相当于:

String
Class
因为
String
类的一个实例。既然
String
Class
是不同的,那么它们的
祖先就没有理由相同