From: "NARUSE, Yui" Date: 2007-05-17T16:07:02+09:00 Subject: [ruby-list:43529] Re: 正規表現のマッチングの書式について naruseです。 Toshiyuki Ogura さんは書きました: > 正規表現 =~ 文字列 > と書いても、 > 文字列 =~ 正規表現 > と書いても、どちらでもいいということなのでしょうか。 正規表現 =~ 文字列 の形で呼ぶと、Regexp#=~ が呼ばれるわけですが、 これは re.c で定義されており、 rb_define_method(rb_cRegexp, "=~", rb_reg_match, 1); となっています。 つまり、実体は rb_reg_match です。 さて、文字列 =~ 正規表現 では String#=~ が呼ばれるわけですが、 これは string.c で定義されており、rb_str_match に行きます。 rb_define_method(rb_cString, "=~", rb_str_match, 1); この rb_str_match は以下のようになっており、 static VALUE rb_str_match(x, y) VALUE x, y; { switch (TYPE(y)) { case T_STRING: rb_raise(rb_eTypeError, "type mismatch: String given"); case T_REGEXP: return rb_reg_match(y, x); default: return rb_funcall(y, rb_intern("=~"), 1, x); } } y、つまり引数が正規表現の場合、結局 rb_reg_match を呼んでいます。 つまり、行き着く先は同じで、String#=~ は糖衣構文ということです。 -- NARUSE, Yui DBDB A476 FDBD 9450 02CD 0EFC BCE3 C388 472E C1EA