4

あなたの同僚がRubyのクラスを「オープン」(「モンキーパッチ」)し、あなたが使用する必要があるいくつかの重要な機能を再定義した場合、モンキーパッチが適用された定義にすでに依存している/依存しているシステムを壊すことなく、モンキーパッチが適用される前の元の機能にどのようにアクセスしますか? ?

4

3 に答える 3

5

メソッドのオーバーライドの例を考えると、彼のモンキー パッチがロードされる前に何らかのコードをロードできる場合は、メソッドにエイリアスを設定できます。

class Fixnum
  alias_method :original_plus, :+
end

class Fixnum
  def +(x)
    self - x
  end
end

>> 5 + 3
=> 2
>> 5.original_plus(3)
=> 8
于 2009-05-16T05:02:30.247 に答える
3

最近、rubyflow フィードでこれを見ました。これは、 aikidokaと呼ばれる最上位の定数の名前空間を作成できる単純なライブラリです。どのように/何にモンキー パッチが適用されているかについての詳細がなければ、手助けするのは少し難しいです。理論的には、このようなアプローチを使用して、モンキーパッチを適用したバージョンのクラスに名前を付けて、それと元の両方に個別にアクセスできるようにすることができます。

于 2009-05-16T04:15:29.207 に答える
0

どの機能がどのように変更されたかによって異なりますが、Jim Wienrich のBlankSlateクラスのような実装が役立つ場合があります。

于 2009-05-16T02:48:19.273 に答える