我从David Flanagan和Yukihiro Matsumoto那里找到了来自 The Ruby Programming Language 的excerpt,其中列出了方法查找的基础:
当Ruby评估方法调用表达式时,它必须首先确定要调用哪个方法。执行此操作的过程称为方法查找或方法名称解析。对于方法调用表达式o.m,Ruby使用以下步骤执行名称解析:
首先,它检查名为m的单例方法的o的本征类。
如果在本征类中找不到方法m,Ruby会在o的类中搜索名为m的实例方法。
如果在类中找不到方法m,Ruby会搜索o类所包含的任何模块的实例方法。如果该类包含多个模块,则以与它们包含的顺序相反的方式搜索它们。也就是说,首先搜索最近包含的模块。
如果在o类或其模块中找不到实例方法m,则搜索会将继承层次结构向上移动到超类。对继承层次结构中的每个类重复步骤2和3,直到搜索到每个祖先类及其包含的模块。
- 醇>
如果在完成搜索后找不到名为m的方法,则会调用名为method_missing的方法。为了找到此方法的适当定义,名称解析算法从步骤1开始。内核模块提供method_missing的默认实现,因此保证名称解析的第二次传递成功。在处理未定义的方法中更详细地介绍了method_missing方法。
David Black在第13.1.3页第394页 Singleton类中的方法查找路径中讨论了 The Well-Grounded Rubyist 2nd Edition 中的概念。
我发现有关Stack溢出的问题可以从引用方法查找路径的答案中受益。我开始想知道方法查找路径是否有任何官方文档。
我在http://ruby-doc.org/core-2.5.0/doc/syntax/methods_rdoc.html搜索"路径"和"查找"但是没找到任何东西。
使用网站对"method lookup"的搜索功能在GitHub上发布了一堆有用的Gists,但没有官方文档。