【问题标题】:In which cases a method call succeeds?在什么情况下方法调用成功?
【发布时间】:2012-10-09 07:58:33
【问题描述】:

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

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

【问题讨论】:

  • 你给这里的人多选吗?
  • @user1729711:看起来有点像测验题,你知道,测验式的多项选择题在 StackOverflow 上是不受欢迎的 :)
  • 这实际上是一个在线edx课程的测验问题..

标签: ruby


【解决方案1】:

如果调用成功,以下条件会影响给定的选项

 - 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.

【讨论】:

    【解决方案2】:

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

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-02
      相关资源
      最近更新 更多