3

このクラスはハッシュを受け取り、入力に応じて温度を変換します。

class Temp
  def initialize(opt={})
    if opt.include?(:cold)
      @colddegree=opt[:cold]
    end
  end
  def self.from_cold(cel)
    Temp.new(:cold => cel) <= instance of class created in class method
  end
end

クラスのインスタンスは、クラス メソッド内で作成されます。なぜそうする必要があるのか​​、それは何をするのか、その背後にある理由は何なのか?

  • メインではなくクラス内にクラスのインスタンスを作成する必要があるのはなぜですか?
  • クラスメソッド内で使用されるのはなぜですか? 通常のオブジェクトメソッド内で必要になる時はありますか?
  • クラスメソッド内でインスタンスを作成しているときに何を呼び出し、何が起こっているのでしょうか? どんな違いがあるの?
4

2 に答える 2

9

Rubyist は常にこの言葉を使用するわけではありませんself.from_coldが、工場です。Temp.from_cold(-40)これにより、API を使用するプログラマーが、たとえば という名前の暗黙的に必要なパラメーターがあることを学習するというボイラープレートを心配することなく、すぐに理解できるメソッド シグネチャを公開できます:cold

のように、初期化してから呼び出す必要がある作業実行オブジェクトがある場合に特に便利ですTempConverter.new(cel: -40).to_fahrenheitTempConverter.cel_to_fahr(-40)他のライブラリによって使用されるオプションを公開する方がクリーンな場合があります。これは主に、一時的な変換を必要とする他のクラスが Demeterの法則に違反する必要がないように、このクラス内の複雑さを隠す方法にすぎません。

于 2013-06-04T14:31:26.993 に答える