猴子在有限的范围内修补内置的ruby类

dav*_*k01 5 ruby dsl monkeypatching instance-eval

我正在研究一个内部的Ruby DSL并让它看起来尽可能漂亮,我需要修补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
Run Code Online (Sandbox Code Playgroud)

结束

Far*_*ler 5

我相信,你正在寻找红宝石的改进.该功能已落在红宝石行李箱中,但可能会在2.0之前恢复