在接收器a.foo
中调用方法foo
的Ruby表达式a
中,以下哪个条件会影响调用是否成功?
a
响应foo方法。a
的类,或者它的一个超类或包含的模块,以处理foo方法的方式实现method_missing。a
是类的实例,而不是类本身。a
的类型正确。答案 0 :(得分:4)
从给定选项中,以下条件会影响调用是否成功
- 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.
答案 1 :(得分:0)
首先,每个对象都是某个类的实例。类本身是Class
类的实例,Class
本身是Module
类的子类。
任何对象都响应由其类或其单例类(在动态添加方法时自动创建)和所有祖先类/模块定义的实例方法。和所有的祖先(包括模块)。
如果对象没有响应发送给它的方法,那么如果已为其定义了 method_missing
方法,则会执行该方法。
此处没有任何内容可确保呼叫成功。在执行原始方法或method_missing
时,任何方法或库都可能引发异常。
另外,请注意public,protected和private方法之间的区别(private和protected方法对允许谁调用它们有限制。)