Bird
Raised Fist0
Rubyprogramming~20 mins

Include for instance methods in Ruby - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Ruby Include Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ Predict Output
intermediate
2:00remaining
What is the output of this Ruby code using include?

Consider the following Ruby code that uses include to add instance methods from a module to a class. What will be printed when the code runs?

Ruby
module Greetings
  def hello
    "Hello from module!"
  end
end

class Person
  include Greetings
end

p = Person.new
puts p.hello
ASyntaxError: unexpected keyword_end
BHello from module!
Cnil
DNoMethodError: undefined method `hello' for #<Person:0x000...>
Attempts:
2 left
💡 Hint

Remember that include adds module methods as instance methods to the class.

❓ Predict Output
intermediate
2:00remaining
What happens if you call a module method without including it?

Look at this Ruby code where a module method is called on an instance of a class that does not include the module. What will happen?

Ruby
module Talk
  def speak
    "Speaking"
  end
end

class Animal
end

a = Animal.new
puts a.speak
ANoMethodError: undefined method `speak' for #<Animal:0x000...>
Bnil
CSyntaxError: unexpected end-of-input
DSpeaking
Attempts:
2 left
💡 Hint

Think about whether the class has access to the module's methods without including it.

🔧 Debug
advanced
2:00remaining
Why does this Ruby code raise an error?

Examine the Ruby code below. It tries to include a module for instance methods, but raises an error. What is the cause?

Ruby
module Friendly
  def greet
    "Hi!"
  end
end

class Robot
  include Friendly()
end

r = Robot.new
puts r.greet
ANameError because Friendly is undefined
BNoMethodError because greet is private
CNoMethodError: undefined method `()' for Friendly:Module
DWorks fine and prints "Hi!"
Attempts:
2 left
💡 Hint

Look closely at the include Friendly() statement.

🧠 Conceptual
advanced
2:00remaining
How does Ruby's include affect method lookup for instance methods?

In Ruby, when a module is included in a class, how does it affect the method lookup path for instance methods?

AThe module's methods override all class methods and become class methods themselves.
BThe module is ignored unless explicitly called with the module name.
CThe module is copied into the class as class methods only, not instance methods.
DThe module is inserted into the class's ancestor chain just above the class, so its instance methods are found before the class's own methods.
Attempts:
2 left
💡 Hint

Think about how Ruby searches for methods when you call them on an instance.

❓ Predict Output
expert
3:00remaining
What is the output of this Ruby code with multiple includes and method overrides?

Analyze the following Ruby code where a class includes two modules with methods of the same name. What will be printed?

Ruby
module A
  def info
    "Module A"
  end
end

module B
  def info
    "Module B"
  end
end

class MyClass
  include A
  include B
  def info
    "MyClass"
  end
end

obj = MyClass.new
puts obj.info
AMyClass
BModule B
CModule A
DNoMethodError
Attempts:
2 left
💡 Hint

Remember that methods defined in the class override included module methods.

Practice

(1/5)
1. What does the include keyword do in Ruby when used inside a class?
easy
A. It deletes all methods from the class.
B. It adds the module's methods as class methods to the class.
C. It creates a new module inside the class.
D. It adds the module's methods as instance methods to the class.

Solution

  1. Step 1: Understand the role of include

    The include keyword is used to add methods from a module into a class.
  2. Step 2: Identify how methods are added

    When a module is included, its methods become instance methods of the class, meaning objects of the class can call them.
  3. Final Answer:

    It adds the module's methods as instance methods to the class. -> Option D
  4. Quick Check:

    Include = instance methods added [OK]
Hint: Include adds module methods as instance methods [OK]
Common Mistakes:
  • Confusing include with extend (which adds class methods)
  • Thinking include creates a new module
  • Assuming include removes existing methods
2. Which of the following is the correct syntax to include a module named Greetings inside a class Person?
easy
A. class Person; include Greetings; end
B. class Person; extend Greetings; end
C. class Person; include(Greetings); end
D. class Person; use Greetings; end

Solution

  1. Step 1: Recall correct syntax for including modules

    In Ruby, to add instance methods from a module, use include ModuleName inside the class body without parentheses.
  2. Step 2: Check each option

    class Person; include Greetings; end uses include Greetings correctly. class Person; extend Greetings; end uses extend which adds class methods, not instance methods. class Person; include(Greetings); end uses parentheses which is not standard syntax. class Person; use Greetings; end uses use which is invalid in Ruby.
  3. Final Answer:

    class Person; include Greetings; end -> Option A
  4. Quick Check:

    Include syntax = include ModuleName [OK]
Hint: Use 'include ModuleName' without parentheses [OK]
Common Mistakes:
  • Using extend instead of include
  • Adding parentheses after include
  • Using invalid keywords like 'use'
3. What will be the output of the following Ruby code?
module Talk
  def speak
    "Hello!"
  end
end

class Dog
  include Talk
end

puts Dog.new.speak
medium
A. NoMethodError
B. Hello!
C. speak
D. nil

Solution

  1. Step 1: Understand module inclusion

    The module Talk defines an instance method speak. Including it in Dog adds speak as an instance method of Dog.
  2. Step 2: Trace the method call

    Creating a new Dog object and calling speak will execute the method from Talk, returning "Hello!".
  3. Final Answer:

    Hello! -> Option B
  4. Quick Check:

    Included method called = "Hello!" [OK]
Hint: Included module methods become instance methods [OK]
Common Mistakes:
  • Expecting NoMethodError because of missing method
  • Confusing instance and class methods
  • Thinking output is method name or nil
4. Identify the error in the following Ruby code:
module Walk
  def walk
    "Walking"
  end
end

class Person
  extend Walk
end

puts Person.new.walk
medium
A. NoMethodError because walk is not an instance method
B. SyntaxError due to extend usage
C. No error, outputs "Walking"
D. TypeError because module cannot be extended

Solution

  1. Step 1: Understand extend vs include

    Using extend Walk adds module methods as class methods, not instance methods.
  2. Step 2: Analyze method call

    Person.new.walk calls walk on an instance, but walk is only a class method here, so it raises NoMethodError.
  3. Final Answer:

    NoMethodError because walk is not an instance method -> Option A
  4. Quick Check:

    Extend adds class methods, instance call fails [OK]
Hint: Extend adds class methods; instance calls fail [OK]
Common Mistakes:
  • Confusing extend with include
  • Expecting no error on instance method call
  • Thinking extend causes syntax or type errors
5. Given the module and classes below, what will puts Cat.new.sound output?
module AnimalSounds
  def sound
    "Generic sound"
  end
end

class Dog
  include AnimalSounds
  def sound
    "Bark"
  end
end

class Cat
  include AnimalSounds
end
hard
A. Bark
B. NoMethodError
C. Generic sound
D. nil

Solution

  1. Step 1: Check method definitions in classes

    Class Dog overrides sound method with "Bark". Class Cat does not override it.
  2. Step 2: Determine method lookup for Cat instance

    Since Cat includes AnimalSounds and does not override sound, calling sound on Cat.new uses the module's method returning "Generic sound".
  3. Final Answer:

    Generic sound -> Option C
  4. Quick Check:

    Included method used if no override [OK]
Hint: Class method overrides module method if defined [OK]
Common Mistakes:
  • Assuming Cat uses Dog's sound method
  • Expecting NoMethodError for missing method
  • Confusing instance and class methods
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard