Freezing an object in Ruby means making it unchangeable. This helps keep data safe from accidental changes.
Frozen objects in Ruby
Introduction
Syntax
Ruby
object.freezeCalling freeze on an object makes it immutable.
If you try to change a frozen object, Ruby raises a FrozenError.
Examples
Ruby
str = "hello" str.freeze str << " world" # This will cause an error
Ruby
arr = [1, 2, 3] arr.freeze arr[0] = 10 # This will cause an error
Ruby
num = 100 num.freeze # Numbers are already immutable, so freezing has no effect
Sample Program
This program freezes a string and then tries to change it. Ruby raises an error, which we catch and print. Finally, it prints the original string.
Ruby
name = "Alice" name.freeze begin name << " Smith" rescue => e puts "Error: #{e.message}" end puts name
Important Notes
Freezing only affects the object itself, not objects inside it. For example, freezing an array does not freeze the objects inside the array.
You can check if an object is frozen by calling object.frozen?.
Summary
Freezing makes objects unchangeable to protect data.
Trying to change a frozen object causes an error.
Use freeze to keep important data safe from accidental changes.
Practice
1. What does the
freeze method do to an object in Ruby?easy
Solution
Step 1: Understand the purpose of
Thefreezefreezemethod is used to make an object immutable, meaning it cannot be changed after freezing.Step 2: Identify the effect on the object
Once frozen, any attempt to modify the object will raise an error, so it prevents modifications.Final Answer:
Prevents any modifications to the object -> Option DQuick Check:
freeze makes object immutable = Prevents modifications [OK]
Hint: Freeze means no changes allowed to the object [OK]
Common Mistakes:
- Thinking freeze deletes the object
- Confusing freeze with duplication
- Believing freeze makes object mutable
2. Which of the following is the correct way to freeze a string object
str in Ruby?easy
Solution
Step 1: Recall Ruby method call syntax
In Ruby, methods are called on objects using dot notation, e.g.,object.method.Step 2: Identify the correct freeze syntax
The correct way to freeze an object is by callingfreezeon it:str.freeze(). The other options are invalid syntax.Final Answer:
str.freeze() -> Option AQuick Check:
Method call syntax = str.freeze() [OK]
Hint: Use dot notation to call freeze: object.freeze() [OK]
Common Mistakes:
- Using freeze as a standalone keyword
- Assigning freeze as a property
- Calling freeze like a function without dot
3. What will be the output of this Ruby code?
arr = [1, 2, 3] arr.freeze arr << 4 puts arr.inspect
medium
Solution
Step 1: Understand freezing the array
The arrayarris frozen witharr.freeze, so it cannot be changed.Step 2: Analyze the modification attempt
The code tries to add an element witharr << 4, which modifies the array. Since it's frozen, this raises a runtime error.Final Answer:
RuntimeError: can't modify frozen Array -> Option AQuick Check:
Modifying frozen object = RuntimeError [OK]
Hint: Modifying frozen objects causes runtime errors [OK]
Common Mistakes:
- Expecting the array to change
- Thinking freeze allows modifications
- Confusing runtime error with syntax error
4. Identify the error in this Ruby code snippet:
name = "Alice" name.freeze name[0] = 'M' puts name
medium
Solution
Step 1: Recognize string freezing
The stringnameis frozen, so it cannot be changed aftername.freeze.Step 2: Understand the attempted modification
Trying to change the first character withname[0] = 'M'modifies the string, which is forbidden and raises a runtime error.Final Answer:
RuntimeError: can't modify frozen String -> Option BQuick Check:
Changing frozen string = RuntimeError [OK]
Hint: Changing frozen strings causes runtime errors [OK]
Common Mistakes:
- Assuming strings can be changed after freeze
- Confusing syntax error with runtime error
- Ignoring freeze effect on string elements
5. Given this Ruby code, what will be the output?
hash = {a: [1, 2], b: [3, 4]}
hash.freeze
hash[:a] << 5
puts hash[:a].inspect
What does this tell us about freezing objects?hard
Solution
Step 1: Understand freezing the hash
The hash object is frozen, so its structure (keys and values) cannot be changed directly.Step 2: Analyze modification of nested array
The value for key:ais an array, which is not frozen. Modifying this array with<< 5is allowed.Step 3: Observe the output
The array now contains [1, 2, 5], showing that freezing the hash does not freeze nested objects.Final Answer:
[1, 2, 5] - freeze prevents changing the hash keys but not the objects inside -> Option CQuick Check:
Freeze is shallow = nested objects can change [OK]
Hint: Freeze is shallow; nested objects stay mutable unless frozen [OK]
Common Mistakes:
- Assuming freeze affects nested objects
- Expecting runtime error on nested modification
- Confusing hash freezing with deep freeze
Recommended
Ready to prove it?
Pass the test and this pattern moves unknown
10 questions ~5 mineasy hard
