Ruby中的'Monkey Patching'究竟意味着什么?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (21)

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

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

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

在Ruby中,术语猴子补丁被误解为意味着对类的任何动态修改,并且经常被用作在运行时动态修改任何类的同义词。

我想知道Ruby中的猴子补丁的确切含义。它是否在做类似以下的事情,还是其他的事情?

class String
  def foo
    "foo"
  end
end
提问于
用户回答回答于

简单的答案是没有“确切”的含义,因为这是一个新词,不同的人使用它的方式不同。这至少可以从维基百科文章中看出。有些人坚持认为它只适用于“运行时”代码(我认为是内置类),而有些人会用它来指代任何类的运行时修改。

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

在Ruby中,术语猴子补丁被误解为意味着对类的任何动态修改,并且经常被用作在运行时动态修改任何类的同义词。

上面的声明断言Ruby的用法是不正确的 - 但是术语的演变,并不总是一件坏事。

用户回答回答于

我听说用于Monkey patching/Duck-punching的最佳解释是由Patrick Ewing在RailsConf 2007中提供的

......如果它像鸭子一样走路,像鸭子一样说话,它就是一只鸭子,对吧?所以,如果这只鸭子没有给你想要的噪音,那么你只需要猛击鸭子,直到它恢复你的期望。

扫码关注云+社区