From: KANEKO Naoshi Date: 1998-04-12T01:29:05+09:00 Subject: [ruby-dev:2241] Re: [ruby-list:7407] Re: string replace 金子です。 In message "[ruby-dev:2240] Re: [ruby-list:7407] Re: string replace" on Sat, 11 Apr 1998 22:08:49 +0900, shugo@po.aianet.ne.jp (Shugo Maeda) writes: shugo> |というか、非互換となりうる修正もありなら、やっぱりメタ文字を shugo> |変えたいと思ってしまいます。 shugo> |printf() の書式指定では % がエスケープ文字になってるように sub で shugo> |は & がエスケープ文字になってる(たとえばです)方が絶対わかりやすい shugo> |です。 shugo> shugo> 非互換と言えば、これも非互換ですよね。 shugo> # 文法レベルではなくてライブラリレベルの変更ですが。 そうです。 shugo> 個人的には新しい記号を使うよりは、Perlなどと同じ記号になって shugo> いた方が、言語学習の負担は少ないように思います。 そもそも ruby は perl の影響をうけ、perl を参考に作成された機能 が数多くあるわけで、その場合、意図的に仕様をあわせるように設計 されているらしいというのは分かります。 ですから、perl の機能によく似ているものは、できればまったく同じ なのが望ましいというのも分かります。 ただ、この場合に限っていえば、実際に、perl と異なる部分があるわ けです。 perl は置換文字列の評価を <<文字列>> や <<正規表現>> とは異なる 独特の <<置換文字列>>という特殊カテゴリとして評価します。 ここにはユーザの意図しない特殊表記が入ることはほとんどありません。 そして1回だけ評価します。 評価が1回だけなので、その中で \ をメタ文字と決めたら、すべて1 種類のメタ文字 \ をつかって特殊表記をエスケープするのはまったく 合理的です。 ruby は、前に述べたように評価に2段階のステップがあります。 一つは文字列の評価で、もう一つは置換文字列としての評価です。 そして、それを意識しなければただしく使えないのは、やはり初心者に はきつい仕様だと思います。'' では多少副作用が軽減されても "" で は依然、問題が残ります。2つのステップで1つのメタ文字を使うのは 合理的ではないわけです。 メタ文字を別にすれば、それだけでほとんどの副作用はなくなり、 ユーザの負担は格段に軽減されます。ユーザは2つのステップを意識す る必要はありません。意識しなくても問題なく、ただしく使用できるの です。 あと、忘れてましたが、DOS/Windowsユーザとしてはさらにもうひとつ 問題があります。 極悪なシフトJISには文字コード中に \ が含まれているのです。 Windows では print 'a'.sub('a', '表1') が処理できません。 もちろん、コード系の依存の問題は言語の問題とは別のものなので、 必要なら jcode などで処理する話なのですが、速度的な問題もあり ますので、意識しないですむなら、その方がうれしいですね。 # 0x40 未満がメタ文字なら OK。 あ、以上の私の話は、perl を意識しない新しい言語としての ruby が どうあるべきかという話と、perl からの移行でなく、ruby を使う人の 話でありますので、 shugo> 個人的には新しい記号を使うよりは、Perlなどと同じ記号になって shugo> いた方が、言語学習の負担は少ないように思います。 とは平行線です。 実際、この ML ではほとんどが perl 経験者と思われますので、 ちょっと分が悪いですね。 でも、せっかくなので思ってることをずらずらと書いてみました。 こうゆう意見の人もいると、覚えていてください。 -- 金子 尚史 (KANEKO Naoshi) wbs01621@mail.wbs.or.jp