2012-04-05 5 views
5

クラス<<自己を使うと、クラスやモジュールをいつ使うのですか?

class Helper 
    class << self 
    # ... 
    end 
end 

module Helper 
    class << self 
    # ... 
    end 
end 

あなたが他の上で1つを使用するとの使用量の違いはありますか?

+0

これらのうちの1つにもう1つの余分な文字がありますか? :)「違いはありますか?」とはどういう意味ですか? 1つはクラスであり、1つはモジュールであり、どちらもeigenclassに入っています。 – Phrogz

+0

私はあなたがいつ他のものを使うのか、尋ねることを意味すると思います。それを反映させるために質問を編集しました。 –

答えて

4

class<<selfは、クラスとモジュールの唯一の違いがあるため、赤いニシンのようです。おそらくあなたはに "私はインスタンス化するつもりはないが、いくつかのメソッドのための名前空間として(そしておそらくそれ自身のグローバルな状態を持つシングルトンとして)存在するオブジェクトを作成したいと思っています。

この場合、どちらも同じように機能します。

class Variation < Helper 

代わりの

module Helper 
    module OwnMethods 
    # Put methods here instead of class << self 
    end 
    extend OwnMethods 
end 

module Variation 
    extend Helper::OwnMethods 
:あなたが派生物を作成するかもしれないというチャンスが(別のオブジェクトが同じメソッドを継承)がある場合、少し書くことが容易であるとして、あなたは、クラスを使用する必要があります

しかし、名前空間だけでは、クラスを介してモジュールを使用するのが一般的です。クラスはインスタンス化が行われることを意味します。

2

モジュールとクラスの違いは、モジュールではなくクラスのインスタンスを作成できることです。ヘルパー(h = Helper.new)のインスタンスを作成する必要がある場合は、クラスでなければなりません。そうでない場合は、おそらくモジュールを残すことが最善です。あなたのコードの残りの部分が質問にどのように関係しているかわかりません。モジュールまたはクラスにクラスメソッドがあるかどうかは、そのオブジェクトのインスタンスを作成する必要があるかどうかには関係ありません。

関連する問題