Rubyに限らず、プログラミングの世界ではしばしばミュータブルとイミュータブルという言葉が登場します。
ミュータブルは「変更可能な」という意味で、反対にイミュータブルは「変更できない、不変の」という意味です。
ミュータブルは破壊的な変更が適用される
ミュータブルなオブジェクトには破壊的な変更が適用できます。そのため、配列の要素が同じオブジェクトを参照していると、破壊的な変更によって本来変わってほしくない値まで一緒に変わってしまう恐れがあります。例えばRubyの文字列(Stringクラス)はミュータブルなので、先ほど説明したようにブロックを使わずに初期値に指定すると不具合が発生します。
イミュータブルなオブジェクトは破壊的な変更を適用できません。
イミュータブルなオブジェクトでは破壊的な変更が適用できません。そのため、ブロックを使わずに初期値を設定しても、文字列で発生したような不具合は発生しないことになります。
感想
ブロックで初期値を指定しないと思わぬ不具合を作ってしまうと説明しますと...
今更だがブロックとは何か?
ブロックの初期値を指定することがわからなかった。あとでまた理解しよう