How to Use the freeze Method in Ruby

09/20/2021

Contents

In this article, you will learn how to use the freeze method in Ruby.

The freeze Method

In Ruby, the freeze method is used to prevent modifications to an object. Once an object is frozen, its state cannot be changed. This is useful when you want to ensure that an object remains constant and cannot be altered accidentally or intentionally. Here’s how you can use the freeze method in Ruby:

Freeze an object

To freeze an object, simply call the freeze method on it:

str = "hello"
str.freeze

In this example, the str object is frozen, and any attempt to modify it will result in an error.

Check if an object is frozen

You can check whether an object is frozen using the frozen? method:

str = "hello"
str.freeze
str.frozen? #=> true

In this example, the frozen? method returns true because the str object is frozen.

Modify a frozen object

If you attempt to modify a frozen object, Ruby will raise a FrozenError exception:

str = "hello"
str.freeze
str.upcase! #=> FrozenError: can't modify frozen String

In this example, the upcase! method is called on the frozen str object, which raises a FrozenError exception because the object is frozen and cannot be modified.

Freeze all objects in a nested structure

If you have a nested data structure (such as an array or a hash) and you want to freeze all the objects inside it, you can use the freeze method recursively:

hash = {a: [1, 2], b: {c: 3}}
hash.freeze
hash[:a].freeze
hash[:b].freeze
hash[:b][:c].freeze

In this example, the hash object and all its nested objects are frozen, ensuring that the entire data structure remains constant and cannot be modified.