Bird
Raised Fist0
Rubyprogramming~10 mins

Open classes (reopening classes) 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 reopen the String class and add a method.

Ruby
class String
  def [1]
    "Hello, " + self
  end
end

puts "World".greet
Drag options to blanks, or click blank then click option'
Agreet
Bhello
Csay_hello
Dgreeting
Attempts:
3 left
💡 Hint
Common Mistakes
Using a method name different from the one called on the string.
Forgetting to reopen the class before defining the method.
2fill in blank
medium

Complete the code to reopen the Integer class and add a method that doubles the number.

Ruby
class Integer
  def [1]
    self * 2
  end
end

puts 5.double
Drag options to blanks, or click blank then click option'
Amultiply
Btwice
Ctimes_two
Ddouble
Attempts:
3 left
💡 Hint
Common Mistakes
Using a method name that does not match the call.
Not returning the correct calculation.
3fill in blank
hard

Fix the error in reopening the Array class to add a method that returns the first element doubled.

Ruby
class Array
  def double_first
    [1] * 2
  end
end

puts [1, 2, 3].double_first
Drag options to blanks, or click blank then click option'
Afirst()
Bself[0]
Cself.first
Dself[1]
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'self[1]' which accesses the second element.
Using 'first()' without 'self'.
4fill in blank
hard

Fill both blanks to reopen the Hash class and add a method that returns keys with values greater than 10.

Ruby
class Hash
  def keys_with_large_values
    select { |[1], [2]| [2] > 10 }.keys
  end
end

puts({a: 5, b: 15, c: 20}.keys_with_large_values)
Drag options to blanks, or click blank then click option'
Akey
Bvalue
Ck
Dv
Attempts:
3 left
💡 Hint
Common Mistakes
Using 'key' and 'value' which are valid but not the correct answer here.
Mixing up the order of key and value.
5fill in blank
hard

Fill all three blanks to reopen the Numeric class and add a method that returns the number squared if positive, else zero.

Ruby
class Numeric
  def positive_square
    if [1] > 0
      [2] [3] 2
    else
      0
    end
  end
end

puts 4.positive_square
puts (-3).positive_square
Drag options to blanks, or click blank then click option'
Aself
C**
D*
Attempts:
3 left
💡 Hint
Common Mistakes
Using '*' instead of '**' for squaring.
Not using 'self' to refer to the number.

Practice

(1/5)
1. What does it mean to reopen a class in Ruby?
easy
A. You write the class again to add or change methods without deleting the original.
B. You create a new class with the same name but different methods.
C. You delete the old class and replace it with a new one.
D. You make a copy of the class and modify the copy only.

Solution

  1. Step 1: Understand Ruby class behavior

    In Ruby, classes are open, meaning you can write the class again to add or change methods.
  2. Step 2: Identify what reopening means

    Reopening a class means modifying the existing class by adding or replacing methods without deleting it.
  3. Final Answer:

    You write the class again to add or change methods without deleting the original. -> Option A
  4. Quick Check:

    Reopen class = add/change methods anytime [OK]
Hint: Reopen means add or change methods by rewriting class [OK]
Common Mistakes:
  • Thinking reopening creates a new separate class
  • Assuming reopening deletes the old class
  • Confusing reopening with copying a class
2. Which of the following is the correct syntax to reopen the String class and add a method shout that returns the string in uppercase with exclamation?
easy
A. class String def shout self.upcase + "!" end end
B. def String.shout self.upcase + "!" end
C. class String def shout upcase! end end
D. class String def shout self + "!" end end

Solution

  1. Step 1: Check class reopening syntax

    To reopen a class, write class ClassName again and define methods inside.
  2. Step 2: Verify method definition and behavior

    Method shout should return uppercase string plus exclamation, so self.upcase + "!" is correct.
  3. Final Answer:

    class String def shout self.upcase + "!" end end -> Option A
  4. Quick Check:

    Reopen class + define method correctly = class String def shout self.upcase + "!" end end [OK]
Hint: Use class name again and define method inside [OK]
Common Mistakes:
  • Defining method outside class
  • Using destructive method like upcase! which changes string
  • Not returning uppercase string with exclamation
3. What will be the output of this Ruby code?
class Array
  def first_two
    self[0..1]
  end
end

arr = [10, 20, 30, 40]
puts arr.first_two.inspect
medium
A. [10]
B. [10, 20]
C. [20, 30]
D. nil

Solution

  1. Step 1: Understand method added to Array

    The method first_two returns elements at index 0 and 1 using self[0..1].
  2. Step 2: Apply method on given array

    Array is [10, 20, 30, 40], so first_two returns [10, 20].
  3. Final Answer:

    [10, 20] -> Option B
  4. Quick Check:

    Array slice 0..1 = first two elements [OK]
Hint: Slice array 0..1 to get first two elements [OK]
Common Mistakes:
  • Confusing index ranges and getting wrong slice
  • Expecting single element instead of array
  • Thinking method returns nil
4. This code tries to reopen the Integer class to add a method double. What is wrong?
class Integer
  def double
    self * 2
  end
end

puts 5.double()
medium
A. Method double should be defined as a class method, not instance method.
B. You cannot reopen built-in classes like Integer.
C. Nothing is wrong; it will print 10.
D. The method double uses wrong syntax for multiplication.

Solution

  1. Step 1: Check if reopening Integer is allowed

    Ruby allows reopening built-in classes like Integer to add instance methods.
  2. Step 2: Verify method and usage

    Method double multiplies self by 2, and calling 5.double() returns 10.
  3. Final Answer:

    Nothing is wrong; it will print 10. -> Option C
  4. Quick Check:

    Reopen Integer + instance method works = 10 output [OK]
Hint: Reopen built-in classes freely; instance methods work [OK]
Common Mistakes:
  • Thinking built-in classes cannot be reopened
  • Confusing instance and class methods
  • Assuming syntax error in multiplication
5. You want to reopen the Hash class to add a method symbolize_keys that returns a new hash with all string keys converted to symbols. Which code correctly does this?
hard
A. class Hash def symbolize_keys each_with_object({}) do |(k, v), h| h[k.to_sym] = v end end end
B. class Hash def symbolize_keys map { |k, v| [k.to_sym, v] } end end
C. class Hash def symbolize_keys keys.map(&:to_sym) end end
D. class Hash def symbolize_keys self.transform_keys(&:to_sym) end end

Solution

  1. Step 1: Understand the goal

    We want a method that returns a new hash with string keys converted to symbols.
  2. Step 2: Check each option's correctness

    class Hash def symbolize_keys each_with_object({}) do |(k, v), h| h[k.to_sym] = v end end end manually builds a new hash but misses handling non-string keys safely. class Hash def symbolize_keys map { |k, v| [k.to_sym, v] } end end returns an array, not a hash. class Hash def symbolize_keys keys.map(&:to_sym) end end returns only keys as symbols, not a hash. class Hash def symbolize_keys self.transform_keys(&:to_sym) end end uses transform_keys(&:to_sym), a built-in method that correctly returns a new hash with symbol keys.
  3. Final Answer:

    class Hash def symbolize_keys self.transform_keys(&:to_sym) end end -> Option D
  4. Quick Check:

    Use transform_keys(&:to_sym) for symbol keys [OK]
Hint: Use transform_keys(&:to_sym) to convert keys easily [OK]
Common Mistakes:
  • Returning array instead of hash
  • Not returning a new hash
  • Ignoring keys that are not strings
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