# RubyのArray#include?が思い通りに動かない夜に。
_published: 2010/04/19_ 
みなさん。元気ですかー? `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文字超えるとマズイので、このへんで。ダー!!