2

Rubyでクラスメソッドを定義する次の2つの方法を考えます。

class Foo
  class << self
    def bar
      # ...
    end
  end

  def self.baz
    # ...
  end
end

2つの間に違いはありますか?一方が他方よりも好ましいですか?

4

4 に答える 4

3

要するに:いいえ、いいえ。

それは個人的な好みに帰着します。最初のバージョンでは、多くのクラスメソッドを定義する場合に入力する手間が省けます。最初の構文が不明瞭な場合は、2番目の構文の方が適している場合があります。

于 2009-07-07T20:31:56.757 に答える
3
于 2009-07-07T23:01:09.170 に答える
0

molfが言ったように、効果的な違いはありません。しかし、IMO、2つ目は、はるかにスキミング可能です。を見逃してclass<<self、インスタンスメソッドをまだ検討していると考えるのは簡単です。クラス自体のプロパティをclass<<self作成するなど、より動的な動作が必要な場合にのみ、ルートを使用する傾向があります。attr_accessor

于 2009-07-07T21:17:05.013 に答える
0

class << selfオプション1は、とに対応するの間に大量のコード行がある場合に問題が発生しますend。ブロック内でメソッドが定義されていることに気付いていない場合はclass << self、それが単なるインスタンスメソッドであると考えるかもしれません。

オプション2は、タイピングが多く、表現力があり、訓練を受けていないRuby-eyeにとってより理解しやすいものです。

他の人がすでに指摘しているように、最終結果に違いはありません。

于 2009-07-07T21:27:21.420 に答える