Ruby のハッシュで値が nil の要素を削除して新しいハッシュを返す

Ruby や Rails は、API(メソッド)を知らなくても、オブジェクトに対してそれっぽい操作を適当に書いても、結構動いたりしてくれるからその点はとても楽しいし助かります。

スポンサーリンク

Hash#compact, Hash#compact! はなかった

昨日書いたコードで、値を nil で初期化してある複数の要素からなるハッシュを操作した後、値が nil のままの要素を削除して新しいハッシュを返すようにしたくて、以下のような処理を書いた。Array#compact, compact! はよく使うので、Hash#compact, compact! もあるかな〜と考えまして。

しかし今回は、NoMethodError で残念。なので delete_if を使って書きました。

delete_if は !(エクスクラメーション)付いてないけど、レシーバ自身を変更する破壊的メソッド。

Hash クラスを拡張して compact, compact! を定義

Ruby はオープンクラスなので、Hash#compact, compact! を定義することもできる。とりあえず簡易的なやつ。

組み込み Hash クラスをオープンして、Hash#compact!, Hash#compact の2つのメソッドを追加しました。compact のほうは self を変更しないようにしています。

色々自由で Ruby すごい。

スポンサーリンク
私は以下の本で Ruby を覚えました。メタプログラミングRubyは入門を超える内容で難しめです。
スポンサーリンク
 
Twitterを使っていますのでフォローお願いたします!ブログの更新情報もつぶやいてます^^
(英語学習用)

Leave Your Message!