a.foo
在调用foo
receiver方法的Ruby表达式中,a
以下哪个条件会影响调用是否成功?
a
响应 foo 方法。a
的类,或其超类或包含的模块之一,以处理 foo 方法的方式实现 method_missing。a
是类的实例,而不是类本身。a
有正确的类型。
a.foo
在调用foo
receiver方法的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
.
另外,请注意公共、受保护和私有方法之间的区别(私有和受保护方法对允许调用它们的人有限制)。