1

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

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

2 回答 2

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.
于 2012-10-14T19:43:17.380 回答
0

首先,每个对象都是某个类的实例。类本身是类的实例Class,而Class本身是类的子Module类。

任何对象都会响应其类或其单例类(在您动态添加方法时自动创建)以及所有祖先类/模块定义的实例方法。和所有的祖先(包括模块)。

如果对象没有响应发送给它的方法,那么如果 method_missing已经为它定义了方法,则执行它。

这里没有任何东西可以确保调用成功。任何方法或库都可能在执行原始方法或method_missing.

另外,请注意公共、受保护和私有方法之间的区别(私有和受保护方法对允许调用它们的人有限制)。

于 2012-10-09T10:13:45.810 回答