サーチ…


備考

便利だが、猿のパッチはすぐには分からない落とし穴がある。特に、この例のようなパッチは、グローバルスコープを汚染します。 2つのモジュールが両方ともHash#symbolize追加した場合、最後に必要なモジュールだけが実際に変更を適用します。残りは消去されます。

さらに、パッチされたメソッドにエラーがある場合、stacktraceは単にパッチされたクラスを指しています。これは、 Hashクラス自体にバグが存在することを意味します(現在はそこにあります)。

最後に、Rubyは保持するコンテナに非常に柔軟性があるため、メソッドを書くときに非常に単純なように見えますが、多くの未定義の機能があります。たとえば、 Array#sumを作成すると、数値の配列には適していますが、カスタムクラスの配列が与えられたときにブレークします。

より安全な代替手段は、Ruby> = 2.0で利用可能な洗練です。

機能の追加

Rubyの任意のクラスにメソッドを組み込むことができます。呼び出し元オブジェクトはselfを使用して参照されます。

class Fixnum
  def plus_one
    self + 1
  end

  def plus(num)
    self + num
  end

  def concat_one
    self.to_s + '1'
  end
end

1.plus_one # => 2
3.plus(5) # => 8
6.concat_one # => '61'


Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow