Ruby / Railsで任意のオブジェクトが配列の要素かどうか調べたい

はじめに

RubyRailsで任意のオブジェクトが配列の要素かどうか調べる場合、普通、include?を使うと思います。
例えば、以下のような感じ。

ystk = "中田ヤスタカ"
perfume = %w(あ〜ちゃん かしゆか のっち)
perfume.include?(ystk)
# => false  僕はtrueだと思う

この場合、「Perfume中田ヤスタカを含むのか?」という意図でコードを書くのであればこれでいいんですが、「中田ヤスタカPerfumeに含まれるのか?」という意図で書きたい場合、include?ではしっくりこないなあ、なんてずっと思っていました。

Object#in?

こんなとき、ActiveSupportのObject拡張であるin?メソッドが超便利。
先程の例の場合、ystkをレシーバーにして、こう書き直すことができる。

ystk.in?(perfume)

うん、やっぱこっちの方がしっくりきますね。

引数が配列じゃなくても使える

詳しくは、ActiveSupportソースコードを見て頂きたいんですが、引数のオブジェクトがinclude?メソッドを持っていれば、配列じゃなくても使うことができます。
例えば、Rangeを引数にするとこんな感じ。

7.in?(1..11)
# => true

Rubyでも使いたい場合

require 'active_support/core_ext'すればOK。

おわりに

最近、blank?tryなしではコードが書けなくなってしまった。

参考