# RubyのArray#include?が思い通りに動かない夜に。 _published: 2010/04/19_ ![alt](http://b.hatena.ne.jp/entry/image/http://d.hatena.ne.jp/shunsuk/20100419/1271674540) みなさん。元気ですかー? `Array#include?` メソッド、思い通りに動いてますかー?私は、そんなテンションにはついて行けません。今日は、 `Array#include?` が思い通りに動かないのは何故かを20,000文字以内で説明しつつ、代わりにどうすればいいのか20,000文字以内で説明します。まあ、 `Array#any?` 使えということなのですが。 こんなクラスを用意してみましたよ。 ```ruby class Format def initialize(f) @f = f end def ==(other) @f == other end end ``` はい。いいですね。思い通り。人生、楽勝ですね。 ```ruby format = Format.new(:html) puts format == :html #=> true ``` あれ。あれれ。 ```ruby format = Format.new(:html) puts [:html, :xml, :json].include? format #=> false ``` これ、 `true` になって欲しいですよね。人生、投げ出したいときってあるよね。 実は、 `Array#include?` メソッドだと、内部的にこんな感じになってるんです。 ```ruby puts :html == format #=> false ``` そ、そういうことかよ。。。 このような場合は、 `Array#include? `が使えません。そこで、 `Array#any?` を使えばいいじゃないっ。 ```ruby format = Format.new(:html) puts [:html, :xml, :json].any? {|f| format == f} #=> true ``` こんな `Format` クラスみたいなの作らなければいい?それが、Railsで見かける `request.format` がこうなってるんです。 ```ruby [:html, :xml, :json].include? request.format ``` ってやると、 `false` ですから。 `false` ですから。 あ。そろそろ20,000文字超えるとマズイので、このへんで。ダー!!