猴子修补有限范围内的内置ruby类
我正在开发一个内部Ruby DSL,为了使它看起来尽可能漂亮,我需要对Symbol类进行修补并添加一些操作符。我想负责如何做到这一点,并希望将补丁的范围和生命周期限制为特定的代码块。这样做有标准模式吗?下面是一些伪代码来说明我的想法:猴子修补有限范围内的内置ruby类,ruby,dsl,monkeypatching,instance-eval,Ruby,Dsl,Monkeypatching,Instance Eval,我正在开发一个内部Ruby DSL,为了使它看起来尽可能漂亮,我需要对Symbol类进行修补并添加一些操作符。我想负责如何做到这一点,并希望将补丁的范围和生命周期限制为特定的代码块。这样做有标准模式吗?下面是一些伪代码来说明我的想法: class SomeContext def self.monkey_patch_region(&block) context = SomeContext.new context.monkey_patch_Symbol conte
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
结束我相信,您正在寻找ruby。该功能已登陆ruby trunk,但可能会在我听说的2.0之前恢复。它的设计目的是混合使用和联X特派团的模块。也许它对monkey和unmonkey补丁有用 更新:mixology对您没有帮助,因为它(un)将模块与对象(与
扩展
)混合,而不是与类(与包含
)混合,并且您想要monkey/unmockey核心类,而不是它们各自的对象。无论如何,我打算保留这个答案,作为可能对其他人有用的参考。我已经做了一个简单(但对我来说足够有用)的改进。也许它对某人有用。