mapでrecieverを破壊するパターン
mapは新しく集合を作るメソッドだが、ブロック引数を操作するとレシーバーを破壊する
[8] pry(main)> al = [{k: 'initial_1'}, {k: 'initial_2'}] => [{:k=>"initial_1"}, {:k=>"initial_2"}] # 元のデータを破壊していない [9] pry(main)> al.map{|e|e[:k]='modified'} => ["modified", "modified"] [10] pry(main)> al.map do |e|e[:k]='modified' [10] pry(main)* e [10] pry(main)* end => [{:k=>"modified"}, {:k=>"modified"}] # 元のデータが破壊されている!! [11] pry(main)> al => [{:k=>"modified"}, {:k=>"modified"}]
mapは新しい集合を作る関数だが、ブロック引数の変更は副作用があるようだ。