In article <20080219.210130.275954098091635027.kou / cozmixng.org>, Kouhei Sutou <kou / cozmixng.org> writes: > ディレクトリを覚えるという状況がよくわからないのですが、どう > いうときにディレクトリを覚えるのでしょうか?例えば、 > net/http.rbを使うときはnetディレクトリを覚える、ということで > しょうか? はい。覚えていないと require の引数を書けません。 まぁ、書けないというのは言い過ぎかもしれませんが、経験上 test/unit で require を書くときにいくらか戸惑った覚えがあり ます。 > 私は階層構造(XXX/YYY)になっている時はXXXを覚えようとは(た > ぶん)思っていませんが、XXXに関連するYYYという機能を使う、と > 考えている気がします。 XXXYYY や XXX-YYY も XXX に関連する YYY という機能を使うと解 釈できるんじゃないでしょうか。 XXX に関連する YYY という機能を使おうと思った時、XXXYYY, XXX-YYY, XXX/YYY のどれなのだろうか、というのを思い出しやす くするするにはどうしたらしいか、というのが問題なのだと思いま す。 > また、XXX/以下にファイルが何個あるかを意識したことがないので > すが、それを意識するのはわりと普通のことなのでしょうか? > (net/シリーズはいろいろあるなぁとかは思ったことがあると思い > ます。) 私の感覚としては、意識してもおかしくありません。いくつもあれ ば、分類に意味があるのが明らかで覚えやすいのですが、そうでな ければ明らかはありません。 もちろん、私が普通であるかどうかはまた別の話になるので、普通 であるかどうかという質問に答えていることにはならないかもしれ ませんけれど。 > 通常のスクリプトではそれほど多くEncDet.openを使うとは思えな > いのですが、RDoc以外ではどういう場合でしょうか?Rubyスクリプ > ト以外(例えばYAML)にもcoding: XXXを書くようにということで > しょうか? はい。もともとこの形式は Emacs や Python から来ているもので、 Ruby 以外にも適用できます。 たとえば、日本語を含んだプレインテキストを処理するときに、エ ンコーディングをどう指定するか、とか。Emacs は自動判別、Ruby は locale や -K オプションというよりは、magic comment という ひとつの情報で両方を制御したほうがいいでしょう。 なお、YAML はたしか仕様自体に UTF-8 という規定が入っているよ うな気がするので微妙な気がします。 > それは各フォーマットの問題な気もします。例えば、XMLでは > encoding="XXX"ですが、今のEncDet.detect_encodingでは対応して > いない気がします。それとも、各フォーマットでのエンコーディン > グ指定書式にも対応していくということでしょうか? 必要になればやってもいいかもしれません。 ただ、XML は XML パーザーが面倒を見てくれるような気もします。 > 今更いうのもアレなんですが、そもそも、openというAPIはどうかなぁ > と思っています。興味があるのは「ファイルを開いてエンコーディ > ングを検出して設定する」ことではなくて、「IOのエンコーディン > グを検出して設定する」ことだけだと思います。なので、以下のよ > うに使えた方がよい気がしています。 > > File.open("XXX") do |f| > f.detect_encoding! > ... > end > > 上記のようなAPIだとFile.open以外のIO(っぽいもの、例えば > StringIO)でもエンコーディング検出機能が同じAPIで使えます。 ひとつ考えていて、上記のでは扱えないのは Apache の mod_cern_meta による形式ですね。経緯からいえば CERN httpd の形 式といったほうがいいんですが、dir/foo というファイルに対して dir/.web/foo.meta に Content-Type とかを書けるというもので、 open するタイミングを捕まえないと問題が出てきます。chdir と か。 > もちろん、ファイルの先頭だけをチェックしたいからopenから主導 > 権を握りたいんだろうなぁとは想像できますが、データを読み込む > 前に呼んでね、でも十分ではないかとも思います。ファイル以外で > もエンコーディングを検出して設定したいことはあると思いますし。 > (例えばTempfileとか。) そういう用途がないとはいいませんし、そういう用途のためのメソッ ドはあっていいとおもいます。 ただ、Tempfile はそのプロセス自身が生成したもので、中身にエ ンコーディングを指定する必要性は下がるような気がします。ある としたら、Tempfile を生成したあと何かコマンドを起動してそこ に書き込ませてそれを読むとかでしょうか。でもそうすると、その コマンドのことを知っていればエンコーディングはわかる気がしま す。具体的にはどいう状況で嬉しいでしょうね? >> そんなわけで、encdetect かなぁ、と思っています。 > > encodingがencと略されているのはRubyのCのAPIまでで、まだRuby > レベルではencodingしかないと思います。encと略してまで短くす > るものではないのではないか、とはまだ思っています。 上でも述べましたが、使用頻度に対する想定が異なっているのが食 い違いの原因ですかねぇ。 > あと、モジュール名が動詞(detect)というのも少し気になります。 > (そういうのはもうすでにたくさんありますが。) 今回のはまさになにかひとつのことを行うライブラリなので動詞が 中身を表している気がします。 機能を増やせば話は変わってきますが、なにかありますかねぇ。 ふむ、magic comment を生成する機能とか? -- [田中 哲][たなか あきら][Tanaka Akira]