Ruby / Railsで任意のオブジェクトが配列の要素かどうか調べたい
はじめに
RubyやRailsで任意のオブジェクトが配列の要素かどうか調べる場合、普通、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
なしではコードが書けなくなってしまった。