Functional Ruby Idioms
Immutable Style
An immutable style creates an updated value instead of changing the original value.
Immutable Style
immutable_style.rb
bonus =
original = { name: "Ada", score: 8 }
new_score = original[:score] + bonus
updated = original.merge(score: new_score)
original_score = original[:score]
updated_score = updated[:score]
puts "bonus=#{bonus}"
puts "original_score=#{original_score}"
puts "updated_score=#{updated_score}"
puts "same_object=#{original.object_id == updated.object_id}"
bonus =
original = { name: "Ada", score: 8 }
new_score = original[:score] + bonus
updated = original.merge(score: new_score)
original_score = original[:score]
updated_score = updated[:score]
puts "bonus=#{bonus}"
puts "original_score=#{original_score}"
puts "updated_score=#{updated_score}"
puts "same_object=#{original.object_id == updated.object_id}"
bonus =
original = { name: "Ada", score: 8 }
new_score = original[:score] + bonus
updated = original.merge(score: new_score)
original_score = original[:score]
updated_score = updated[:score]
puts "bonus=#{bonus}"
puts "original_score=#{original_score}"
puts "updated_score=#{updated_score}"
puts "same_object=#{original.object_id == updated.object_id}"
immutable update
Ruby objects can be mutable, but methods like `merge` make it easy to create updated copies.