Ruby (1.9.3) のドキュメントは、 scan が =~ と同等であることを暗示しているようです。
- scan は複数の一致を返しますが、=~ は最初の一致のみを返します。
- scan は一致データを返し、=~ はインデックスを返します。
ただし、次の例では、同じ文字列と式に対して 2 つのメソッドが異なる結果を返すように見えます。何故ですか?
1.9.3p0 :002 > str = "Perl and Python - the two languages"
=> "Perl and Python - the two languages"
1.9.3p0 :008 > exp = /P(erl|ython)/
=> /P(erl|ython)/
1.9.3p0 :009 > str =~ exp
=> 0
1.9.3p0 :010 > str.scan exp
=> [["erl"], ["ython"]]
最初に一致したインデックスが 0 の場合、スキャンは "erl" と "python" の代わりに "Perl" と "Python" を返すべきではありませんか?
ありがとう