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
是不同的,那么它们的祖先就没有理由相同