In the last post we talked about Variables.
Variables can also be declared as a constant. Constant starts with uppercase letters, like so, PI = 3.14
. Declared inside the class their scope is within the class. Declared outside, they can be accessed globally.
But declaring a constant variable makes it immutable? No. It does not.
VAR1 = 10
> 10
VAR1 = 20
(irb):2: warning: already initialized constant VAR1
(irb):1: warning: previous definition of VAR1 was here
> 20
Trying to change a constant will throw a warning but it can still be mutated.
Do we have a way to make constants immutable?
Yes, we do! The answer is - Freeze.
Objects in Ruby can be frozen using Object.freeze
method. Freeze creates constants that can’t mutate.
numbers = [1, 2, 3]
numbers.frozen?
> false
numbers.freeze
numbers << 4
> RuntimeError: can't modify frozen Array
numbers.frozen?
> true
numbers = [5, 6, 7]
> [5, 6, 7] #object_id chages. Now it is pointing to different object.