我是红宝石的初学者。这里有两个不同的Class
& Object
。我不明白拥有Object
的目的。对象是基于调用类的构造函数(或new
方法)构建的对象,那么为什么需要单独的Object
类?关于Class
& Object
课程。
答案 0 :(得分:2)
红宝石中的所有内容都是一个对象,Class
也是如此:
irb > Class.is_a? Object
=> true
每个对象都有一个类,Object
:
irb > Object.class === Class
=> true
即使Class
本身也有一个类:
irb > Class.class === Class
=> true
答案 1 :(得分:0)
为什么需要单独的
Object
类?
您有Class
和Object
的不同类,因为类和对象不一样。
在Ruby中,所有都是一个对象,每个对象都有一个类,但并不是每个对象都是一个类。
这会创建一个新类:
class MyClass
end
MyClass
是一个类:
MyClass.is_a? Class #=> true
类对象具有特定方法,例如superclass
。此方法在Class
类中实现,因为MyClass
是一个类,它会响应它:
MyClass.superclass #=> Object
另一方面,MyClass
的实例不是一个类:
my_instance = MyClass.new #=> #<MyClass:0x007f7f5c041d10>
my_instance.is_a? Class #=> false
并且它不响应superclass
:
my_instance.superclass #=> NoMethodError: undefined method `superclass'
但当然有一个类,即MyClass
:
my_instance.class #=> MyClass
MyClass
和my_instance
都是对象:
MyClass.is_a? Object #=> true
my_instance.is_a? Object #=> true
MyClass.object_id #=> 70092490725660
my_instance.object_id #=> 70092490673800