Bird
Raised Fist0
Rubyprogramming~10 mins

Prepend for method chain insertion in Ruby - Interactive Code Practice

Choose your learning style10 modes available
Practice - 5 Tasks
Answer the questions below
1fill in blank
easy

Complete the code to prepend a string to another string.

Ruby
result = 'world'.[1]('Hello ')
puts result
Drag options to blanks, or click blank then click option'
Aprepend
Bappend
Cinsert
Dconcat
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'append' which adds text at the end.
Using 'concat' which also adds at the end.
2fill in blank
medium

Complete the code to prepend 'Mr. ' to the name variable.

Ruby
name = 'Smith'
name.[1]('Mr. ')
puts name
Drag options to blanks, or click blank then click option'
Aconcat
Bprepend
Cinsert
Dappend
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'append' which adds text at the end.
Using 'insert' with wrong index.
3fill in blank
hard

Fix the error in the code to prepend 'Hello, ' to the greeting string.

Ruby
greeting = 'world'
greeting.[1]('Hello, ')
puts greeting
Drag options to blanks, or click blank then click option'
Aappend
Bconcat
Cprepend
Dinsert
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'append' which adds text at the end.
Using 'concat' which adds at the end.
4fill in blank
hard

Fill both blanks to prepend 'Hello, ' and then append '!' to the string.

Ruby
text = 'world'
text.[1]('Hello, ').[2]('!')
puts text
Drag options to blanks, or click blank then click option'
Aprepend
Bappend
Cconcat
Dinsert
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'append' first which adds at the end before prepending.
Using 'concat' instead of 'append'.
5fill in blank
hard

Fill all three blanks to prepend 'Hello, ', convert to uppercase, and then append '!' to the string.

Ruby
text = 'world'
text = text.[1]('Hello, ').[2].[3]('!')
puts text
Drag options to blanks, or click blank then click option'
Aprepend
Bupcase
Cappend
Ddowncase
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'downcase' instead of 'upcase'.
Appending before prepending.

Practice

(1/5)
1. What does the prepend keyword do in Ruby when used with a module and a class?
easy
A. It inserts the module before the class in the method lookup chain.
B. It appends the module after the class in the method lookup chain.
C. It replaces the class methods with the module methods permanently.
D. It creates a copy of the module inside the class without affecting method lookup.

Solution

  1. Step 1: Understand method lookup order with prepend

    Using prepend places the module before the class in the method lookup chain, so module methods are checked first.
  2. Step 2: Compare prepend with other module inclusion methods

    Unlike include which adds the module after the class, prepend inserts it before, changing method resolution order.
  3. Final Answer:

    It inserts the module before the class in the method lookup chain. -> Option A
  4. Quick Check:

    Prepend = module methods run first [OK]
Hint: Prepend means module methods run before class methods [OK]
Common Mistakes:
  • Confusing prepend with include
  • Thinking prepend replaces class methods permanently
  • Assuming prepend appends module after class
2. Which of the following is the correct syntax to prepend a module Mod to a class MyClass?
easy
A. class MyClass; extend Mod; end
B. class MyClass; include Mod; end
C. class MyClass; prepend Mod; end
D. class MyClass; insert Mod; end

Solution

  1. Step 1: Recall Ruby syntax for prepend

    The correct syntax to prepend a module is prepend ModuleName inside the class definition.
  2. Step 2: Eliminate other options

    include adds module after class, extend adds methods as class methods, and insert is invalid syntax.
  3. Final Answer:

    class MyClass; prepend Mod; end -> Option C
  4. Quick Check:

    Prepend syntax = prepend ModuleName [OK]
Hint: Use 'prepend ModuleName' inside class to insert module first [OK]
Common Mistakes:
  • Using include instead of prepend
  • Using extend which affects class methods
  • Typing invalid keywords like insert
3. What is the output of this Ruby code?
module M
  def greet
    "Hello from M, " + super
  end
end

class C
  prepend M
  def greet
    "Hello from C"
  end
end

puts C.new.greet
medium
A. "Hello from C"
B. "Hello from M, Hello from C"
C. NoMethodError
D. "Hello from M"

Solution

  1. Step 1: Understand method lookup with prepend

    Because M is prepended, its greet method is called first.
  2. Step 2: Follow the super call in module method

    The super inside M#greet calls the original greet in C, returning "Hello from C".
  3. Step 3: Combine returned strings

    The module method returns "Hello from M, " + "Hello from C" resulting in "Hello from M, Hello from C".
  4. Final Answer:

    "Hello from M, Hello from C" -> Option B
  5. Quick Check:

    Prepend + super calls original method [OK]
Hint: Prepend runs module method first; super calls original method [OK]
Common Mistakes:
  • Ignoring super call and expecting only module output
  • Thinking prepend replaces original method without super
  • Expecting NoMethodError due to super
4. Identify the error in this Ruby code using prepend:
module M
  def hello
    super + " world"
  end
end

class C
  prepend M
end

puts C.new.hello
medium
A. TypeError because prepend is used incorrectly
B. No error; outputs " world"
C. SyntaxError due to missing method in class
D. NoMethodError because super has no method to call

Solution

  1. Step 1: Check method definitions

    The module M defines hello calling super, but class C has no hello method.
  2. Step 2: Understand super call behavior

    Since C has no hello, super has no method to call, causing a NoMethodError.
  3. Final Answer:

    NoMethodError because super has no method to call -> Option D
  4. Quick Check:

    Super needs original method; missing causes NoMethodError [OK]
Hint: Super must call existing method; else NoMethodError [OK]
Common Mistakes:
  • Assuming super works without original method
  • Thinking prepend fixes missing methods automatically
  • Confusing syntax error with runtime error
5. Given this code, what will be the output?
module A
  def info
    "A" + super
  end
end

module B
  def info
    "B" + super
  end
end

class Base
  def info
    "Base"
  end
end

class MyClass < Base
  prepend A
  prepend B
end

puts MyClass.new.info
hard
A. "BABase"
B. "BaseAB"
C. "ABBase"
D. "BASuperBase"

Solution

  1. Step 1: Understand multiple prepends order

    Modules prepended last are checked first, so B is before A in lookup.
  2. Step 2: Trace method calls

    B#info runs first, returns "B" + super, which calls A#info, returning "A" + super, which calls Base#info returning "Base".
  3. Step 3: Combine results

    Concatenate strings: "B" + "A" + "Base" = "BABase".
  4. Final Answer:

    "BABase" -> Option A
  5. Quick Check:

    Last prepend runs first; super chains down [OK]
Hint: Last prepended module runs first in method chain [OK]
Common Mistakes:
  • Assuming first prepended module runs first
  • Ignoring method lookup order with multiple prepends
  • Confusing prepend with include order
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