 
 This page contains automated test results for code from O'Reilly's Ruby Cookbook. If this code looks interesting or useful, you might want to buy the whole book.
| Freezing an Object to Prevent Changes | ||
|---|---|---|
| Code | Expected | Actual | 
| frozen_string = 'Brrrr!'
frozen_string.freeze
frozen_string.gsub('r', 'a') | "Baaaa!" | "Baaaa!" | 
| frozen_string.gsub!('r', 'a') | TypeError: can't modify frozen string ... | TypeError: can't modify frozen string from (irb):4:in `gsub!' from (irb):4 | 
| sequences = [[1,2,3], [1,2,4], [1,4,9]].freeze sequences << [2,3,5] | TypeError: can't modify frozen array ... | TypeError: can't modify frozen array from (irb):6:in `<<' from (irb):6 | 
| sequences[2] << 16 | [1, 4, 9, 16] | [1, 4, 9, 16] | 
| frozen_string.clone.frozen? | true | true | 
| frozen_string.dup.frozen? | false | false | 
| frozen_string = 'A new string.' frozen_string.frozen? | false | false | 
| API_KEY = "100f7vo4gg".freeze API_KEY[0] = 4 | TypeError: can't modify frozen string ... | TypeError: can't modify frozen string from (irb):13:in `[]=' from (irb):13 | 
| API_KEY = "400f7vo4gg" | warning: already initialized constant API_KEY | |
| class MyClass
  def my_method
    puts "This is the only method allowed in MyClass."
  end
  MyClass.freeze
end
class MyClass
  def my_method
    "I like this implementation of my_method better."
  end
end | TypeError: can't modify frozen class ... | TypeError: can't modify frozen class from (irb):22 | 
| class MyClass
  def my_other_method
    "Oops, I forgot to implement this method."
  end
end | TypeError: can't modify frozen class ... | TypeError: can't modify frozen class from (irb):27 | 
| class MySubclass < MyClass
  def my_method
    "This is only one of the methods available in MySubclass."
  end
  def my_other_method
    "This is the other one."
  end
end
MySubclass.new.my_method | "This is only one of the methods available in MySubclass." | "This is only one of the methods available in MySubclass." |