0

每当我与 Rubyists 交谈时,我都会听到关于method_addedmethod_missing. 然而,我最近因为在一个项目中同时使用这两种方法而受到指责。争论是另一个库(例如 rspec,例如)也可以重载方法,并使程序处于奇怪的状态,具体取决于method_missing首先调用哪个版本。

我很想知道这种情况发生的频率。超载真的有那么危险method_missing吗?method_missing有没有人有现实世界的冲突引起的灾难的例子?

4

1 回答 1

4

要记住的一件事是,如果您(重新)定义method_missing一个类,您将替换此方法的任何先前实现(例如来自 Gem)。您可以通过创建一个继承自您要使用 method_missing 扩展的类的新类来避免这种情况。

但是,这通常不是问题,因为大多数宝石都有自己的类。

要记住的另一件事是始终super在末尾 调用method_missing以不破坏方法调用链。

def method_missing(m, *args, &block)
  # your code...

  super
end

也许这个Ruby Method Lookup Flow的图形也很有帮助。

于 2012-06-27T06:10:08.627 回答