わたなべです.

URA Takefumi <hage / power.email.ne.jp> writes:

:というか、最初に原さんの本を参照して、で、
:
:>$ ruby -ve 'p Regexp.new("", "n")'
:>ruby 1.6.1 (2000-09-27) [i586-cygwin]
:>//i
:
:という結果が出てきて混乱したようです ^^;
:なんでiなんだろう、って。どうしてでしょう?

"n" は真だから, そこに文字列を指定しても無意味です.
    if (argc >= 2) {
        if (FIXNUM_P(argv[1])) flag = FIX2INT(argv[1]);
        else if (RTEST(argv[1])) flag = RE_OPTION_IGNORECASE;
    }
なぜかこうなってるのかといえば歴史的理由からなんですけど,
今となっては
  Regexp.new(string[, option[, code]])
で option は
  true なら ignore case
  Fixnum ならマニュアルのとおり
  文字列なら i, x, p, n, e, s, u 全部受け付ける
ようにすると混乱がない気がしますね.

こうすると 3 番目の引数は要らなくなるけど,
おそらく互換性を考えると残さざるを得ないわけですが,
でも 2 番目の "true なら ignore case" はもう要らないのかも.

-- 
わたなべひろふみ