在哪些情况下方法调用成功?

时间:2012-10-09 07:58:33

标签: ruby

在接收器a.foo中调用方法foo的Ruby表达式a中,以下哪个条件会影响调用是否成功?

  1. a响应foo方法。
  2. a的类,或者它的一个超类或包含的模块,以处理foo方法的方式实现method_missing。
  3. a是类的实例,而不是类本身。
  4. a的类型正确。

2 个答案:

答案 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方法对允许谁调用它们有限制。)