Bird
Raised Fist0
Rubyprogramming~5 mins

Open classes (reopening classes) in Ruby - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does it mean to 'reopen' a class in Ruby?
Reopening a class means you can add new methods or change existing ones to a class even after it has been defined. Ruby lets you open any class again and modify it.
Click to reveal answer
beginner
How do you reopen a class in Ruby?
You reopen a class by writing the class keyword with the same class name again. Inside this block, you can add or change methods.
Click to reveal answer
intermediate
Why are open classes useful in Ruby?
Open classes let you fix bugs, add features, or change behavior of existing classes without changing the original source code. This is helpful for customizing libraries or core classes.
Click to reveal answer
intermediate
What is a risk of using open classes carelessly?
Changing core or library classes can cause unexpected bugs or conflicts if different parts of code expect different behaviors. It can make debugging harder.
Click to reveal answer
beginner
Example: How to add a method 'greet' to Ruby's String class using open classes?
class String
  def greet
    "Hello, #{self}!"
  end
end

"World".greet # => "Hello, World!"
Click to reveal answer
What happens when you reopen a class in Ruby?
AYou can add or change methods of that class.
BYou create a new class with the same name.
CYou delete the original class.
DYou convert the class to a module.
Which keyword is used to reopen a class in Ruby?
Adef
Bclass
Cmodule
Dopen
What is a potential problem when reopening core Ruby classes?
AIt deletes all existing methods.
BIt can make code run slower.
CIt can cause syntax errors.
DIt can cause unexpected bugs or conflicts.
Can you reopen a class multiple times in Ruby?
AOnly if the class is a module.
BNo, only once.
CYes, as many times as you want.
DOnly if the class is user-defined.
What will this code output? class String def shout upcase + "!" end end "hello".shout
A"HELLO!"
B"hello!"
CError: method shout not found
D"hello"
Explain what 'open classes' means in Ruby and give a simple example.
Think about how you can add methods to existing classes.
You got /3 concepts.
    What are the benefits and risks of using open classes in Ruby?
    Consider why you might want to change a class after it's defined and what could go wrong.
    You got /2 concepts.

      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