a.foo在调用fooreceiver方法的Ruby表达式中,a以下哪个条件会影响调用是否成功?
a响应 foo 方法。a的类,或其超类或包含的模块之一,以处理 foo 方法的方式实现 method_missing。a是类的实例,而不是类本身。a有正确的类型。
a.foo在调用fooreceiver方法的Ruby表达式中,a以下哪个条件会影响调用是否成功?
a响应 foo 方法。a的类,或其超类或包含的模块之一,以处理 foo 方法的方式实现 method_missing。a是类的实例,而不是类本身。a有正确的类型。从给定的选项中,如果调用成功,以下条件会影响
- a responds to the foo method.
- a's class, or one of its superclasses or included modules, implements
method_missing in a way that handles the foo method.
首先,每个对象都是某个类的实例。类本身是类的实例Class,而Class本身是类的子Module类。
任何对象都会响应其类或其单例类(在您动态添加方法时自动创建)以及所有祖先类/模块定义的实例方法。和所有的祖先(包括模块)。
如果对象没有响应发送给它的方法,那么如果 method_missing已经为它定义了方法,则执行它。
这里没有任何东西可以确保调用成功。任何方法或库都可能在执行原始方法或method_missing.
另外,请注意公共、受保护和私有方法之间的区别(私有和受保护方法对允许调用它们的人有限制)。