5

我正在开发一个内部 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

结尾

4

2 回答 2

5

我相信,您正在寻找 ruby​​ 改进。该功能已登陆 ruby​​ 主干,但可能会在 2.0 之前恢复

于 2012-08-12T07:03:50.780 回答
1

我听说过mixology gem。它旨在混合和取消混合模块。也许它对猴子和非猴子补丁很有用。

更新: mixology 不会帮助你,因为它(un)将模块混合到对象(如extend),而不是类(如include),并且你想要猴子/非猴子核心类,而不是单独的对象。无论如何,我打算将此答案保留为对其他人可能有用的参考。

于 2012-08-13T02:27:19.560 回答