5

私は内部RubyDSLに取り組んでおり、それをできるだけきれいに見せるために、Symbolクラスにモンキーパッチを適用し、いくつかの演算子を追加する必要があります。私はこれをどのように行うかについて責任を持ち、パッチの範囲と存続期間を特定のコードブロックに制限したいと思います。これを行うための標準的なパターンはありますか?これが私が考えていることを示すためのいくつかの擬似コードです:

class SomeContext
  def self.monkey_patch_region(&block)
    context = SomeContext.new
    context.monkey_patch_Symbol
    context.instance_eval(&block)
    context.unmonkey_patch_Symbol
  end

  # magical method
  def monkey_patch_Symbol
    #...
  end

  # another magical method
  def unmonkey_patch_Symbol
    #...
  end

終わり

4

2 に答える 2

5

私はあなたがルビーの改良を探していると信じています。この機能はルビートランクに着陸しましたが、2.0より前に元に戻される可能性があります

于 2012-08-12T07:03:50.780 に答える
1

ミクソロジーの宝石について聞いたことがあります。モジュールをミックスインおよびミックス解除するように設計されています。たぶんそれは猿と猿のパッチを外すのに役立つかもしれません。

更新: mixologyは、モジュールをextendクラス(のように)ではなくオブジェクト(のように)に(アン)ミキシングしinclude、オブジェクトを個別にではなく、monkey / unmonkeyコアクラスが必要なため、役に立ちません。とにかく、私はこの答えを他の誰かにとっておそらく有用な参考資料として維持するつもりです。

于 2012-08-13T02:27:19.560 に答える