OPEN Class

  • 以下のように既存のClassを再度OPENしてメソッドを追加することができる。
  • これはClassを再定義することでなく、再度開いくのだ、
class Array
  def replace(from, to)
    each_with_index do |e, i|
      self[i] = to if e == from
    end
  end
end

でも、Arrayにはすでにreplaceのメソッドが定義されている。 なのでこれはバグを起こす。このようなコードをMonkeypatchと呼ぶ

Monkeypatch

Arrayクラスのメソッド確認

[].methods.grep /^re/ # => [:replace, :reject, :reject!, :respond_to?, ...

なので、上記のArray#replace()のカスタムメソッドはArray#substiute()に変更し、名の重複を回避する必要がある。

results matching ""

    No results matching ""