Posted over 4 years ago. Visible to the public. Repeats.

How Ruby method lookup works

When you call a method on an object, Ruby looks for the implementation of that method. It looks in the following places and uses the first implementation it finds:

  1. Methods from the object's singleton class (an unnamed class that only exists for that object)
  2. Methods from prepended modules (Ruby 2.0+ feature)
  3. Methods from the object's class
  4. Methods from included modules
  5. Methods from the class hierarchy (superclass and its ancestors)

Example

Let's say we have the following class hierarchy:

Copy
class Superclass def action puts "Superclass" end end module IncludedModule def action puts "Included module" super end end module PrependedModule def action puts "Prepended module" super end end module SingletonModule def action puts "Singleton class" super end end class Klass < Superclass include IncludedModule prepend PrependedModule def action puts "Klass" super end end

… and we call a method like this:

Copy
instance = Klass.new instance.extend(SingletonModule) instance.action

Then we get an output as expected:

Copy
Singleton class Prepended module Klass Included module Superclass
Growing Rails Applications in Practice
Check out our new e-book:
Learn to structure large Ruby on Rails codebases with the tools you already know and love.

Author of this card:

Avatar
Henning Koch
Last edit:
12 months ago
by Michael Leimstädtner
Keywords:
look-up, implementation, override, overwrite
About this deck:
We are makandra and do test-driven, agile Ruby on Rails software development.
License for source code
Posted by Henning Koch to makandra dev
This website uses cookies to improve usability and analyze traffic.
Accept or learn more