サーチ…


猿がクラスにパッチを当てる

Monkey patchingは、クラス自体の外にあるクラスまたはオブジェクトの修正です。

カスタム機能を追加すると便利なことがあります。

例:文字列クラスをオーバーライドして解析をブール値に提供する

class String 
  def to_b
    self =~ (/^(true|TRUE|True|1)$/i) ? true : false
  end
end

ご覧のとおり、 to_b()メソッドをStringクラスに追加するので、任意の文字列をブール値に解析できます。

>>'true'.to_b 
=> true
>>'foo bar'.to_b
=> false

オブジェクトを猿にパッチする

クラスのパッチ適用と同様に、単一のオブジェクトにパッチを適用することもできます。違いは、その1つのインスタンスだけが新しいメソッドを使用できることです。

例:文字列オブジェクトをオーバーライドして解析をブール値に提供する

s = 'true'
t = 'false'    

def s.to_b
  self =~ /true/ ? true : false
end

>> s.to_b
=> true
>> t.to_b
=> undefined method `to_b' for "false":String (NoMethodError)


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