Mutable and Immutable Objects
Objects can be mutable or immutable. The former can be changed, the latter cannot. In Ruby, numbers, boolean values and
nil are immutable. Strings are mutable, unlike in Java or Python.
While we should only encounter numbers and boolean values as immutable object at this stage, it is good to know that every oject in Ruby can be rendered immutable using the
#freeze method. We can also use the
#frozen? method to check if current object the variable is referencing is frozen or not (immutable/rendered immutable or not).
irb:001> str = '42' => "42" irb:002> str.frozen? # String object are not immutable => false irb:003> str.freeze # Prevent further modifications of `str` => "42" irb:004> str.frozen? => true irb:005> 42.frozen? # Numbers are => true
Immutable objects are usefull for threading or encapsulation (those concepts need Zettel on their own).