当前位置:  开发笔记 > 编程语言 > 正文

"猴子补丁"在Ruby中究竟意味着什么?

如何解决《"猴子补丁"在Ruby中究竟意味着什么?》经验,为你挑选了3个好方法。

据维基百科称,猴子补丁是:

一种在不改变原始源代码的情况下扩展或修改动态语言的运行时代码的方法.

来自同一条目的以下陈述使我感到困惑:

在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的使用是不正确的 - 但是术语的演变,并不总是坏事.



1> RSK..:

我听说过猴子修补/鸭子打孔的最佳解释是Patrick Ewing在RailsConf 2007中

......如果它像鸭子一样走路,像鸭子一样说话,它就是一只鸭子,对吧?因此,如果这只鸭子没有给你你想要的噪音,你必须只是打它,直到它恢复你所期望的.


"猴子补丁就像暴力.如果它不起作用,你就没有使用它."

2> Joshua Swink..:

简短的回答是,没有"确切"的含义,因为它是一个新颖的术语,不同的人使用它的方式不同.至少可以从维基百科的文章中看出这一点.有些人坚持认为它只适用于"运行时"代码(我猜想是内置类),而有些人会用它来引用任何类的运行时修改.

就个人而言,我更喜欢更具包容性的定义.毕竟,如果我们只使用术语修改内置类,我们如何引用所有其他类的运行时修改?对我来说重要的是源代码和实际运行类之间存在差异.

在Ruby中,术语monkey patch被误解为对类的任何动态修改,并且通常用作在运行时动态修改任何类的同义词.

上面的陈述断言Ruby的使用是不正确的 - 但是术语的演变,并不总是坏事.


"......不同的人使用它的方式不同." 在这里和Ruby-Talk邮件列表上阅读答案后,我意识到你是绝对正确的.这个术语在第一次创造时具有更具体的意义,但是 - 正如你所说的那样 - "术语发展,这并不总是坏事."

3> Ana Betts..:

猴子修补是指在运行时替换类的方法(不像其他人所描述的那样添加新方法).

除了作为一种非常明显且难以调试的方式来改变代码之外,它还不能扩展; 随着越来越多的模块开始猴子修补方法,变化的可能性相互增长.


那么用什么术语来描述添加新方法的行为(如果有这样的术语)?
如果两个不同的库将相同的方法添加到同一个类中,那么将始终*替换*另一个.两者都只是*添加*方法并不重要.添加仍然是猴子修补.至少,这就是Ruby社区使用该术语的方式.Python使用它的方式不同.
推荐阅读
贾志军
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有