From: Kouhei Sutou Date: 2008-02-19T21:01:28+09:00 Subject: [ruby-dev:33864] Re: encdet.rb 須藤です。 In <877ih1pl4d.fsf@fsij.org> "[ruby-dev:33856] Re: encdet.rb" on Tue, 19 Feb 2008 14:32:15 +0900, Tanaka Akira wrote: > > ひとつしかないことでなにか問題があった経験があるということで > > しょうか? > > そのようなディレクトリは覚えにくいと感じています。 > > おそらく、階層構造にすることは分類の意味があるのに、ひとつし > かないのでは分類の意味がないことが原因ではないかと思っていま > す。一般に意味のないことを覚えるのは難しいものですし。 ディレクトリを覚えるという状況がよくわからないのですが、どう いうときにディレクトリを覚えるのでしょうか?例えば、 net/http.rbを使うときはnetディレクトリを覚える、ということで しょうか? 私は階層構造(XXX/YYY)になっている時はXXXを覚えようとは(た ぶん)思っていませんが、XXXに関連するYYYという機能を使う、と 考えている気がします。 また、XXX/以下にファイルが何個あるかを意識したことがないので すが、それを意識するのはわりと普通のことなのでしょうか? (net/シリーズはいろいろあるなぁとかは思ったことがあると思い ます。) > ただ、データ自身にエンコーディングを記録するというのは、それ > なりに普及してほしいと思っているので、使いにくいほど長くした > いとは思いません。その意味で Encoding::Detector.open はちょっ > と長すぎるように思います。 通常のスクリプトではそれほど多くEncDet.openを使うとは思えな いのですが、RDoc以外ではどういう場合でしょうか?Rubyスクリプ ト以外(例えばYAML)にもcoding: XXXを書くようにということで しょうか? それは各フォーマットの問題な気もします。例えば、XMLでは encoding="XXX"ですが、今のEncDet.detect_encodingでは対応して いない気がします。それとも、各フォーマットでのエンコーディン グ指定書式にも対応していくということでしょうか? > 比較対象のロケール依存なものは open の 4文字なのでこれと同等 > の長さを望むのは無理だと思いますが、あまり差が開きすぎるのは > よろしくないと感じています。 今更いうのもアレなんですが、そもそも、openというAPIはどうかなぁ と思っています。興味があるのは「ファイルを開いてエンコーディ ングを検出して設定する」ことではなくて、「IOのエンコーディン グを検出して設定する」ことだけだと思います。なので、以下のよ うに使えた方がよい気がしています。 File.open("XXX") do |f| f.detect_encoding! ... end 上記のようなAPIだとFile.open以外のIO(っぽいもの、例えば StringIO)でもエンコーディング検出機能が同じAPIで使えます。 もちろん、ファイルの先頭だけをチェックしたいからopenから主導 権を握りたいんだろうなぁとは想像できますが、データを読み込む 前に呼んでね、でも十分ではないかとも思います。ファイル以外で もエンコーディングを検出して設定したいことはあると思いますし。 (例えばTempfileとか。) > そんなわけで、encdetect かなぁ、と思っています。 encodingがencと略されているのはRubyのCのAPIまでで、まだRuby レベルではencodingしかないと思います。encと略してまで短くす るものではないのではないか、とはまだ思っています。 あと、モジュール名が動詞(detect)というのも少し気になります。 (そういうのはもうすでにたくさんありますが。)