CSC/ECE 517 Fall 2012/ch1 1w22 an: Difference between revisions

From Expertiza_Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 15: Line 15:


This entire tracing that the object does is the method lookup path.
This entire tracing that the object does is the method lookup path.
==What is method_missing?==
Now suppose that the object does not find a matching method in its method lookup path i.e there is no such method defined in the class. Then what?
The NoMethodError Exception is raised .

Revision as of 02:59, 9 September 2012

Introduction

When we define a method in a class and decide to call that method, how do we do it?

We simply create an object of the class and pass the method name to the object as a message. The object then looks up into its method lookup path and tries to match the called method (passed as a message to the object) with the defined methods in the class. When there is a match, the method is executed along with the parameters passed and the result is returned.

What is a Method Lookup Path?

When the object receives a method name that is to be executed, these are the steps carried out for finding out that method called:

  • It looks in the current self object’s own instance methods.
  • Then it looks in the list of instance methods that all objects of that class share.
  • Then in each of the included modules of that class, in reverse order of inclusion.
  • Then it looks in that class’s superclass.
  • Then in the superclass’s included modules, all the way up until it reaches the class Object.
  • If it still can’t find a method, the very last place it looks is in the Kernel module, included in the class Object.
  • Finally, it calls method_missing (if defined in the class), else throws up the NOMethodError exception.

This entire tracing that the object does is the method lookup path.

What is method_missing?

Now suppose that the object does not find a matching method in its method lookup path i.e there is no such method defined in the class. Then what?

The NoMethodError Exception is raised .