From: Koji Arai Date: 2003-06-04T22:19:59+09:00 Subject: [ruby-list:37751] Re: マッチした部分を配列にしまう方法 新井です。 string =~ string の挙動に関してです。 In message "[ruby-list:37726] Re: マッチした部分を配列にしまう方法" on 26 May 2003 16:21:51 +0900, matz@ruby-lang.org (Yukihiro Matsumoto) wrote: > まつもと ゆきひろです > |前者です。理由は、直観的でないからです(私の感覚で)。 > | > |なぜ、直観的でないか考えたところ、=~ は、正規表現マッチを行 > |う演算子という認識があるからだとおもいます。String#index は > |正規表現マッチではありませんから。 > | > |以前は =~ に複数の意味があるようには思えなかったが、今は複数 > |の意味があるように思えるっと言い替えてもいいです。 > > まあ、理解できる考えです。 > (a) 1.6 > (b) 現在の1.8 > (c) 新井案 > > ということになるんでしょうか。(a)が気に入らないから(b)にした > わけですが、考えてみれば(c)でも妥協できるかも。 現在、1.6 の挙動 + warning になったわけですが ~ string はどうしますか?これもなくすと私好みの ruby になります(^^; 理由は string =~ string と同じです。 また、現状 string =~ string の該当コードは | case T_STRING: | #if RUBY_VERSION_CODE < 181 | rb_warn("string =~ string will be obsolete; use explicit regexp"); | #endif | reg = rb_reg_regcomp(y); | start = rb_reg_search(reg, x, 0, 0); | if (start == -1) { | return Qnil; | } | return INT2NUM(start); となってますが、これだと 1.8.1 になると warning が消えるだけで 何も変化しません。(c) 案なら #if RUBY_VERSION_CODE < 181 rb_warn("string =~ string will be obsolete; use explicit regexp"); reg = rb_reg_regcomp(y); start = rb_reg_search(reg, x, 0, 0); if (start == -1) { return Qnil; } return INT2NUM(start); #else rb_raise(rb_eTypeError, "honyarara-"); #endif とかですかね? -- 新井康司 (Koji Arai)