0

ruby初心者です。ここに 2 つの異なるクラスClass&がありObjectます。持つ目的がわかりませんObject。オブジェクトは、クラスのコンストラクター (またはメソッド) を呼び出して構築されたものですが、なぜ別のクラスnewが必要なのですか? &クラスObjectについて教えてください。ClassObject

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なぜ別のクラスが必要なのですか?

クラスとオブジェクトは同じではないため、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

Objectどちらもクラスのメソッドに応答します。たとえば、次のようになりますobject_id

MyClass.object_id          #=> 70092490725660
my_instance.object_id      #=> 70092490673800
于 2013-06-18T12:16:51.000 に答える