[ruby-list:37751] Re: マッチした部分を配列にしまう方法

From: Koji Arai <JCA02266@...>
Date: 2003-06-04 13:19:59 UTC
List: ruby-list #37751
新井です。

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)

In This Thread

Prev Next