Rubyでクラスメソッドを定義する次の2つの方法を考えます。
class Foo
class << self
def bar
# ...
end
end
def self.baz
# ...
end
end
2つの間に違いはありますか?一方が他方よりも好ましいですか?
Rubyでクラスメソッドを定義する次の2つの方法を考えます。
class Foo
class << self
def bar
# ...
end
end
def self.baz
# ...
end
end
2つの間に違いはありますか?一方が他方よりも好ましいですか?
要するに:いいえ、いいえ。
それは個人的な好みに帰着します。最初のバージョンでは、多くのクラスメソッドを定義する場合に入力する手間が省けます。最初の構文が不明瞭な場合は、2番目の構文の方が適している場合があります。
molfが言ったように、効果的な違いはありません。しかし、IMO、2つ目は、はるかにスキミング可能です。を見逃してclass<<self
、インスタンスメソッドをまだ検討していると考えるのは簡単です。クラス自体のプロパティをclass<<self
作成するなど、より動的な動作が必要な場合にのみ、ルートを使用する傾向があります。attr_accessor
class << self
オプション1は、とに対応するの間に大量のコード行がある場合に問題が発生しますend
。ブロック内でメソッドが定義されていることに気付いていない場合はclass << self
、それが単なるインスタンスメソッドであると考えるかもしれません。
オプション2は、タイピングが多く、表現力があり、訓練を受けていないRuby-eyeにとってより理解しやすいものです。
他の人がすでに指摘しているように、最終結果に違いはありません。