Functional Programming has seen a resurgence in interest in the last few years and is often mentioned in opposition to Object-Orientated Programming.
However, Object-Orientated Programming can actually absorb some of the lessons of Functional Programming to improve performance and reliability.
This code is from a paper that examines three ways in which Immutability, a common Functional Programming technique, can be used to develop immutable objects in Ruby.
You can read the paper here:
http://seamusbrady.ie/wp-content/uploads/2015/07/ImmutabilityandDesignPatternsinRuby.pdf