From: Tanaka Akira Date: 2009-02-22T14:37:29+09:00 Subject: [ruby-dev:38066] Re: ENCODING_FIXED と ENCODING_NONE の廃止 In article <499B4E60.9000703@airemix.jp>, "NARUSE, Yui" writes: > しかし、//u 等に限って言えばそのような大きな問題ではなく、 > /a/u と同じことをできる方法が存在せず、UTF-8, EUC-JP, Windows-31J の > 3 つのエンコーディングでしか使えない特殊な機能である点から、 > 局地的な問題だと思っています。 > > そしてまず、直接的な問題としては、例えば、 >> Regexp.new(/a/u.source) == /a/u > => false > と、Regexp#source と Regexp#new で戻らない点があります。 戻すためには options も指定してください。 r = /a/u r2 = Regexp.new(r.source, r.options) p r2.fixed_encoding? #=> true options は fixed_encoding だけでなく、//i など他の option を 保存するためにも必要です。 そして、これで戻ることからわかるように、任意のエンコーディン グで fixed_encoding にすることも実は可能です。 p Regexp.new("a", 16).fixed_encoding? #=> true 16 というのを直接書くというのは変ではありますが、 Regexp::FIXEDENCODING という定数を作ることは簡単です。 > /a/u や /\w/u を非 ASCII な文字を含む場合なのでこれらについて考えると、 すいません。文章がよくわかりません。 > しかし、そのような機能は必要でしょうか。 > わたしは必要ないと思いますし、もし必要ならば他のエンコーディングにも提供するべきです。 現在も提供していないわけではありません。まともに提供するのも 簡単です。 また、//i についてはどうでしょうか。 /fi/ui は "\uFB01" とマッチします。 というのは U+FB01 は fi の合字だからですが、 /fi/ei と EUC-JP を明示したときにも "\uFB01" にマッチすべき なんでしょうか。 > そして、すでに 1.8 用に書かれた /a/u 等もわざわざ UTF-8 等に限定する意図は > なかったのではないかと思います。 そうは思いません。 > 現状、できごころで /u を付けてしまった正規表現リテラルから、 > /u を削るという不毛な作業が行われていますが、本当にそれは必要なんでしょうか。 この作業ってどこで起きてるんですか? //n についてはたしかにあいまいな使いかたが多かったと思います。 だから、警告に弱めたのですが、それ以外は明確だったように感じ ています。 -- [田中 哲][たなか あきら][Tanaka Akira]