📖 Scenario: Imagine you are creating a simple program to understand how Ruby finds methods when you call them on an object. This is like asking who answers a question first in a group of friends. Ruby looks for the method in a specific order called the method lookup chain.
🎯 Goal: You will build a small Ruby program with a class and a module. You will see how Ruby finds methods by calling the same method name from different places. This will help you understand the method lookup chain.
📋 What You'll Learn
Create a class called Animal with a method sound that returns the string "Generic sound".
Create a module called Walkable with a method sound that returns the string "Walking sound".
Include the module Walkable in the class Animal.
Create an instance of Animal called dog.
Call the sound method on dog and print the result.
💡 Why This Matters
🌍 Real World
Understanding method lookup helps when you use modules and inheritance in Ruby programs, which is common in web development and scripting.
💼 Career
Knowing method lookup chains is important for debugging and designing clean, reusable Ruby code in jobs like backend development and automation.
Progress0 / 4 steps
1
Create the Animal class with a sound method
Create a class called Animal with a method sound that returns the string "Generic sound".
Ruby
Hint
Use class Animal to start the class and def sound to define the method.
2
Create the Walkable module with a sound method
Create a module called Walkable with a method sound that returns the string "Walking sound".
Ruby
Hint
Use module Walkable to start the module and def sound to define the method.
3
Include the Walkable module in the Animal class
Add the line include Walkable inside the Animal class, below the sound method.
Ruby
Hint
Write include Walkable inside the Animal class to add the module.
4
Create an instance and call the sound method
Create an instance of Animal called dog. Then call dog.sound and print the result using puts.
Ruby
Hint
Create dog = Animal.new and then puts dog.sound to see which method Ruby uses.
Practice
(1/5)
1.
What does the method lookup chain in Ruby represent?
easy
A. The list of all variables in a class
B. The order Ruby searches to find a method to execute
C. The sequence of method calls inside a method
D. The order Ruby compiles the code
Solution
Step 1: Understand method lookup chain meaning
The method lookup chain is the path Ruby follows to find a method when called on an object.
Step 2: Compare options with definition
Only The order Ruby searches to find a method to execute correctly describes this as the order Ruby searches for a method to execute.
Final Answer:
The order Ruby searches to find a method to execute -> Option B
Quick Check:
Method lookup chain = method search order [OK]
Hint: Think 'where Ruby looks for methods' [OK]
Common Mistakes:
Confusing method lookup with variable list
Thinking it shows method call sequence
Mixing lookup with code compilation order
2.
Which Ruby code correctly shows the method owner for to_s called on a string?
"hello".method(:to_s).owner
easy
A. String
B. Object
C. BasicObject
D. Kernel
Solution
Step 1: Recall where to_s is defined for String
The to_s method for String objects is actually defined in the Kernel module, which is included in Object, and thus available to String.
Step 2: Check method owner for to_s on a String object
Using "hello".method(:to_s).owner returns Kernel because String does not override to_s.
Final Answer:
Kernel -> Option D
Quick Check:
to_s owner for String = Kernel [OK]
Hint: String inherits to_s from Kernel [OK]
Common Mistakes:
Assuming method is owned by String
Confusing Object and BasicObject
Forgetting Kernel defines to_s
3.
Given this Ruby code, what is the output?
module M1
def greet; "Hello from M1"; end
end
class C
include M1
def greet; "Hello from C"; end
end
obj = C.new
puts obj.greet
medium
A. Hello from C
B. Hello from M1
C. NoMethodError
D. Hello from Object
Solution
Step 1: Understand method lookup order with include and override
Class C includes module M1, but also defines its own greet method, which overrides the module's method.
Step 2: Determine which greet method is called
Ruby looks first in C, finds greet there, so it calls "Hello from C".
Final Answer:
Hello from C -> Option A
Quick Check:
Method override in class wins over included module [OK]
Hint: Class methods override included module methods [OK]
Common Mistakes:
Thinking included module method runs first
Expecting NoMethodError due to confusion
Assuming Object's method is called
4.
What is the error in this Ruby code snippet?
module M
def hello; "Hi from M"; end
end
class A
prepend M
def hello; "Hi from A"; end
end
obj = A.new
puts obj.hello
medium
A. No error, output is "Hi from M"
B. No error, output is "Hi from A"
C. SyntaxError due to prepend usage
D. NoMethodError for hello
Solution
Step 1: Understand prepend effect on method lookup
Prepending module M places it before class A in the lookup chain, so M's methods override A's.
Step 2: Determine which hello method runs
Calling hello on obj calls M's method, outputting "Hi from M".
Final Answer:
No error, output is "Hi from M" -> Option A
Quick Check:
Prepend puts module before class in lookup [OK]
Hint: Prepend modules override class methods [OK]
Common Mistakes:
Expecting class method to run instead
Thinking prepend causes syntax error
Confusing prepend with include
5.
Consider this Ruby code:
module M1
def info; "M1"; end
end
module M2
def info; "M2"; end
end
class Base
def info; "Base"; end
end
class Derived < Base
include M1
prepend M2
end
obj = Derived.new
puts obj.info
What will be printed and why?
hard
A. M1, because include puts M1 before Base
B. Base, because class method overrides modules
C. M2, because prepend puts M2 before Derived in lookup
D. NoMethodError, info not found
Solution
Step 1: Analyze method lookup order with prepend and include
Prepend M2 places it before Derived, then Derived, then included M1, then Base.
Step 2: Identify which info method is called
Since M2 is first in lookup, its info method runs, printing "M2".
Final Answer:
M2, because prepend puts M2 before Derived in lookup -> Option C
Quick Check:
Prepend > class > include > superclass [OK]
Hint: Prepend modules come before class, include after [OK]
Common Mistakes:
Thinking include module method runs first
Assuming class method overrides prepend module
Ignoring method lookup chain order
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.