0

我是红宝石的初学者。这是两个不同的分类Class& Object。我不明白拥有Object. 对象是建立在调用类的构造函数(或new方法)之上的,那么为什么需要单独的Object类呢?请澄清我关于Class&Object类。

4

2 回答 2

2

ruby 中的一切都是对象,因此Class

irb > Class.is_a? Object
 => true

每个对象都有一个类,所以Object

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

甚至Class它本身也有一个类:

irb > Class.class === Class
 => true
于 2013-06-18T08:39:12.420 回答
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
于 2013-06-18T12:16:51.000 回答