Rubyの===演算子についてまとめてみた

こんにちは、hachi8833です。 前回の週刊Railsウォッチのrescueの項で扱った、Rubyの===演算子の動作を以下にまとめてみました。 Rubyの===演算子について 左辺が単独のStringやIntegerオブジェクトの場合 ==と同じ動作 左辺がClassオブジェクトの場合: 右辺がそのクラスのインスタンスであるかどうかを比較する 左辺がRegexpオブジェクトの場合: 右辺とマッチするかどうかを取れる 前回と同じ記事「Rescue’s Elegant Trick for Knowing Which Exceptions to Catch」のコードがわかりやすいので、再度引用します。 (1..10) === 5 # true (‘a’..’f’) === “z” # false String === “hello” # true String === 1 # false /[0-9]{3}/ === “hello123” # true /[0-9]{3}/ === “hello” # false 公式ドキュメントには以下の記述があります。 特殊な等号演算子。Object#===での説明:「このメソッドは case 文での比較に用いられます。 デフォルトはObject#==と同じ働きをしますが、 この挙動はサブクラスで所属性のチェックを実現するため 適宜再定義されます」。たとえば、Range#===はotherが範囲内に含まれている時に真を返します。 Rubyで使われる記号の意味: ===より 参考: JavaScriptの===との違い Rubyのトリプルイコール演算子===は、Rubyの通常の==演算子よりフレキシブルな、見方を変えればゆるい演算子です。 一方、以下のようにJavaScriptの厳密等価演算子である===は、等価演算子==より厳密な比較(型を変換しない比較)を行います。 同価演算子(===と!==) 型を変換せずに厳密に比較する 等価演算子(==と!=) 型が異なる場合は変換してから上の同値比較を行う