据维基百科称,猴子补丁是:
一种在不改变原始源代码的情况下扩展或修改动态语言的运行时代码的方法.
来自同一条目的以下陈述使我感到困惑:
在Ruby中,术语monkey patch被误解为对类的任何动态修改,并且通常用作在运行时动态修改任何类的同义词.
我想知道Ruby修补猴子的确切含义.它是在做类似下面的事情,还是其他什么?
class String def foo "foo" end end
RSK.. 62
我听说过猴子修补/鸭子打孔的最佳解释是Patrick Ewing在RailsConf 2007中
......如果它像鸭子一样走路,像鸭子一样说话,它就是一只鸭子,对吧?因此,如果这只鸭子没有给你你想要的噪音,你必须只是打它,直到它恢复你所期望的.
"猴子补丁就像暴力.如果它不起作用,你就没有使用它." (30认同)
Joshua Swink.. 44
简短的回答是,没有"确切"的含义,因为它是一个新颖的术语,不同的人使用它的方式不同.至少可以从维基百科的文章中看出这一点.有些人坚持认为它只适用于"运行时"代码(我猜想是内置类),而有些人会用它来引用任何类的运行时修改.
就个人而言,我更喜欢更具包容性的定义.毕竟,如果我们只使用术语修改内置类,我们如何引用所有其他类的运行时修改?对我来说重要的是源代码和实际运行类之间存在差异.
在Ruby中,术语monkey patch被误解为对类的任何动态修改,并且通常用作在运行时动态修改任何类的同义词.
上面的陈述断言Ruby的使用是不正确的 - 但是术语的演变,并不总是坏事.
我听说过猴子修补/鸭子打孔的最佳解释是Patrick Ewing在RailsConf 2007中
......如果它像鸭子一样走路,像鸭子一样说话,它就是一只鸭子,对吧?因此,如果这只鸭子没有给你你想要的噪音,你必须只是打它,直到它恢复你所期望的.
简短的回答是,没有"确切"的含义,因为它是一个新颖的术语,不同的人使用它的方式不同.至少可以从维基百科的文章中看出这一点.有些人坚持认为它只适用于"运行时"代码(我猜想是内置类),而有些人会用它来引用任何类的运行时修改.
就个人而言,我更喜欢更具包容性的定义.毕竟,如果我们只使用术语修改内置类,我们如何引用所有其他类的运行时修改?对我来说重要的是源代码和实际运行类之间存在差异.
在Ruby中,术语monkey patch被误解为对类的任何动态修改,并且通常用作在运行时动态修改任何类的同义词.
上面的陈述断言Ruby的使用是不正确的 - 但是术语的演变,并不总是坏事.
猴子修补是指在运行时替换类的方法(不像其他人所描述的那样添加新方法).
除了作为一种非常明显且难以调试的方式来改变代码之外,它还不能扩展; 随着越来越多的模块开始猴子修补方法,变化的可能性相互增长.