每当我与Rubyists交谈时,我都能听到关于method_added
和method_missing
的精彩内容。但是,我最近被指责在一个项目中使用它们。参数是另一个库(例如rspec)也可能重载方法,并将程序置于一个奇怪的状态,具体取决于首先调用的method_missing
版本。
我很想知道这种情况经常发生的频率。超载method_missing
是否真的那么危险?有没有人有method_missing
冲突导致的现实世界的祸患?
答案 0 :(得分:4)
要注意的一件事是,如果您(重新)在类上定义method_missing
,则替换此方法的任何先前实现(例如,来自Gem)。
您可以通过创建一个继承自您要使用method_missing扩展的类的新类来避免这种情况。
然而,这通常不是问题,因为大多数宝石都有自己的类。
要记住的另一件事是始终在super
的末尾调用method_missing
,以免破坏方法调用链。
def method_missing(m, *args, &block)
# your code...
super
end
也许这张Ruby Method Lookup Flow的图片也很有帮助。