これがTrueになる。
String === 'foo'
#=> true
逆にするとFalse。
'foo' === String
#=> false
===
は正規表現として使われるが(僕は)、どうやら他のクラスにも実装されているよう。
[12] pry(main)> String.===
ArgumentError: wrong number of arguments (0 for 1)
from (pry):12:in `==='
どうやら引数を一つ取るクラスメソッドとして定義されている模様。
String === 'foo'
#=> true
ちなみに
case .. when
の比較には===
が使われているらしいので、
case 'foo'
when /foo/
...
when 'bar', 'baz' #(,で区切るとorが使える。)
...
else
...
end
これは、caseの値 === whenの値
と思いがちだが、逆で、
以下の結果から、
'foo' === /foo/
#=> false
/foo/ === 'foo'
#=> true
whenの値 === caseの値
の模様。
つまり、こんなのもあり。
a = 'foo'
case a
when String
puts 'String!'
when Integer
puts 'Integer!'
end
追記
scivolaさんにコメント頂き、教えていただきました。
===は同値の時にTrueではなく、各クラスでcaseで使った時に嬉しいように再定義されているらしいです。
(Object#===の時はObject#==のaliasとして定義されており、同値の時にTrueを返すらしい)