班级& ruby中的对象类

时间:2013-06-18 08:32:00

标签: ruby

我是红宝石的初学者。这里有两个不同的Class& Object。我不明白拥有Object的目的。对象是基于调用类的构造函数(或new方法)构建的对象,那么为什么需要单独的Object类?关于Class& Object课程。

2 个答案:

答案 0 :(得分:2)

红宝石中的所有内容都是一个对象Class也是如此:

irb > Class.is_a? Object
 => true

每个对象都有一个类Object

也是如此
irb > Object.class === Class
 => true

即使Class本身也有一个类:

irb > Class.class === Class
 => true

答案 1 :(得分:0)

  

为什么需要单独的Object类?

您有ClassObject的不同类,因为类和对象不一样。

在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

MyClassmy_instance都是对象:

MyClass.is_a? Object       #=> true
my_instance.is_a? Object   #=> true

两者都响应Object类的方法,例如object_id

MyClass.object_id          #=> 70092490725660
my_instance.object_id      #=> 70092490673800