7

使用法に違いはありますか

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

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

いつ使用しますか?

4

2 に答える 2

6

ここ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

ただし、クラスはインスタンス化が行われることを意味するため、単に名前空間を指定する場合は通常、クラスよりもモジュールを使用します。

于 2012-04-05T23:13:17.590 に答える
2

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

于 2012-04-05T23:14:49.443 に答える