使用法に違いはありますか
class Helper
class << self
# ...
end
end
と
module Helper
class << self
# ...
end
end
いつ使用しますか?
ここ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
ただし、クラスはインスタンス化が行われることを意味するため、単に名前空間を指定する場合は通常、クラスよりもモジュールを使用します。
モジュールとクラスの違いは、クラスのインスタンスは作成できますが、モジュールは作成できないことです。Helper (h = Helper.new) のインスタンスを作成する必要がある場合は、クラスにする必要があります。そうでない場合は、モジュールのままにしておくのがおそらく最善です。コードの残りの部分が質問にどのように関連しているかわかりません。モジュールまたはクラスにクラスメソッドがあるかどうかは、そのオブジェクトのインスタンスを作成する必要があるかどうかとは関係ありません。