1

私が知っているシングルトンメソッドは、それが定義されているオブジェクトから呼び出すことができます。以下の例Cでは、オブジェクトに定義されたClassシングルトンメソッドのオブジェクトもあります。では、別のオブジェクトはどのように呼び出すことができますか?a_class_methodClassCClassDa_class_method

individuationこの例では、オブジェクトの原則はどのように成り立っていますか?

class C
end
#=> nil

def C.a_class_method
 puts "Singleton method defined on #{self}"
end
#=> nil

C.a_class_method
#Singleton method defined on C
#=> nil

class D < C
end
#=> nil

D.a_class_method
#Singleton method defined on D
#=> nil
4

2 に答える 2

1

< を実行したとき、クラス D をクラス C から継承させたので、D はクラス C から何かを取得します。すべての D の親が何であるかを知りたい場合は、実行できます

puts "D's parent Classes = #{D.ancestors.join(',')}"

それはあなたに与えるでしょう

D's parent Classes = D,C,Object,Kernel

したがって、D は個別のクラスですが、C 用に定義されたメソッドを使用できる C のサブクラスです。

于 2013-03-16T05:06:07.920 に答える
1

利用できる理由a_class_methodは次のとおりです。

D.singleton_class.superclass == C.singleton_class
 # => true
于 2013-03-16T18:34:51.317 に答える