Rails の in? メソッドを使ってみる

使い方

f:id:matt-note:20190130163451p:plain

f:id:matt-note:20190130163408p:plain

 

使ってみる

in? メソッドの引数に配列リテラルを渡すと、"フンガー!"だったら true になるけれど、"フンガー"では false を返す。

f:id:matt-note:20190130163757p:plain

 

一方、in? メソッドの引数に文字列を渡した場合、"フンガー".in?(opening) は true になった。

f:id:matt-note:20190130172428p:plain

 

なんで引数が文字列の "フンガー".in?(opening) は true になるのか…?

Ruby のドキュメントを調べてみる。

f:id:matt-note:20190130170527p:plain

  

f:id:matt-note:20190130165730p:plain

 

Array#include? は要素が等しい場合は true になるということがわかった。

一方、String#include? で引数に文字列を渡す場合は、引数の文字列が含まれていれば true になるとのこと。

 

つまり、以下のようなことだった。(in? メソッドのソースコードを参照)

f:id:matt-note:20190130180150p:plain

f:id:matt-note:20190130180208p:plain

 

まとめ

Rails の in? メソッドは、Object#in?(str) と Object#in?(arr) で、動作が異なる。これは in? メソッド内で String.include?(obj) や Array.include?(obj) のように処理されるため。