From: Yukihiro Matsumoto Date: 2008-01-24T03:51:51+09:00 Subject: [ruby-dev:33338] Re: Binary String まつもと ゆきひろです In message "Re: [ruby-dev:33335] Re: Binary String" on Thu, 24 Jan 2008 02:17:46 +0900, 遊楽庵 writes: |ただ、Stringの文字列への傾斜があまりにも過激なので |バイナリデータはどうなっちゃうの?? |と思っています。 |要するに「バランス悪くない??」という感じでしょうか。 | |桐生さんの例を引くまでもなく、バイナリデータをファイルから |読み込んで計算をするという処理は一般的だと思うのです。 「そんなことする人はいない」なんて言うつもりはありませんが、 少なくとも辞書的な意味では「一般的」じゃあないと思います。 |String#[]まで文字列になって |それをすっきり書く方法はなくなってしまいました。 | |いくつかStringをバイト列としてアクセスする方法の案が出てましたが |バイナリデータを処理するとなったとたん、Rubyらしからぬゴチャゴチャした |コードになっちゃいそうで… 今まで簡単に書けていたものが繁雑になるケースがあるというのは 認めます。また、完全ではないものの、その辺に対応するメソッド を追加したいという意思はあります。 |田中さんの「レイヤ」というキーワードで思いついたのですが、 |いっそのことその概念のレイヤをクラス階層で表現しちゃったらどうでしょうね。 |Stringの親に「ByteTrain」というクラスを入れて、バイト列を表現する。 |ByteTrain#[]は整数値を扱います。 |で、バイナリファイルを読み込んだ時にはStringではなくこっちを使う。 |テキストの時はStringでよい。 |Stringの親に入れるので、IO#readの戻り値はByteTrainのオブジェクトだよ |ということで統一はそれなりに取れるでしょう。 ふーむ、せっかく考えていただいたものの、その継承の使い方はあ まりRuby的でないような。親子関係にあるクラスでメソッドの挙動 が違う(んですよね、[]とか[]=とか)はLiscov Substituion Principleを崩しているのであまり良いデザインではないでしょう。 でもTrainって名前は面白いですね。 まつもと ゆきひろ /:|)