Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

deleteメソッドでnilを消す時は注意

配列のdeleteメソッドは、返り値として引数と一致した場合selfを返します。
よって、nilを削除しようとすると、返り値にnilを返してきます。
これでは結果がわかりません。
更に厄介な事には、破壊的メソッドなので後々にも影響が出ます。

> ary = [1,2,3,nil,4]
#=> [1, 2, 3, nil, 4]

> ary.delete(nil)
#=> nil

> ary
#=> [1, 2, 3, 4]

気軽に使うメソッドではなかったみたいですね(白目

こういう場合は素直にcomapctを使えば綺麗になります。

> ary = [1,2,3,nil,4]
#=> [1, 2, 3, nil, 4]

> ary.compact
#=> [1, 2, 3, 4]

> ary
#=> [1, 2, 3, nil, 4]

> ary.compact
#=> [1,2,3,4]

参考もと