发送消息时,Ruby对象会搜索它是否有一个按该名称响应的方法.其方法查找按以下顺序搜索,并使用它找到的第一个方法.
Module.prepend存在之前写的)或者,更简单地说,它看起来自己,然后self.class.ancestors按照它们列出的顺序进行所有操作.
调用该方法时遵循此查找路径; 如果您创建一个类的实例,然后重新打开该类并添加一个方法或通过模块混合一个方法,现有实例将获得对该方法的访问权限.
如果所有这些都失败了,它会查看它是否有method_missing方法,或者它的类是否有,它的父类等.
我的问题是:除了手工检查代码,或使用类似的示例方法puts "I'm on module A!",你能告诉给定方法的来源吗?例如,你可以列出一个对象的方法,并看到"这个是在父类上,这个是在模块A上,这个是在类上并覆盖父类",等等?
ruby ×1